Hi, How we can create a column matrix (i.e. nx1) with array literals? I am aware of other ways for achieving this such as using initializer functions such as “zeros” and “ones”. but how we can do this with array literals? I expect the following snippet create a column matrix:

```
A = [1; 2]
```

and also following snippet:

```
A = [1
2]
```

but both of this will create a 1 dimensional array as “2-element Array{Int64,1}”.

in Documetation explicitly states:

Concatenation

If the arguments inside the square brackets are separated by semicolons ( `;`

) or newlines >instead of commas, then their contents are *vertically concatenated* together instead of the >arguments being used as elements themselves.

I think this is a little inconsistency in Julia syntax.

1 Like

No, because 1d arrays are treated as column vectors in all of the Julia linear-algebra routines. (Because of this, it’s not clear why you need to create a 1-column matrix instead of a 1d array?)

You could use `reshape([1,2],2,1)`

.

(It might also make sense to have a constructor `Matrix(x::Vector) = reshape(x, length(x), 1)`

; currently there is no such constructor defined in Base.)

See also this discussion and issue #17084.

Thank you for your respond. my point is if semicolon or newline concatenate vertically why it does not work in this case?

Because it *is* doing “vertical” concatentation (`vcat`

) — from Julia’s perspective, a 1d array is “vertical”, and more generally the **first dimension** of any array (of *any dimensionality*) is defined to be “vertical”. For the same reason:

```
julia> [[3,4]; [5,6]]
4-element Array{Int64,1}:
3
4
5
6
julia> size([rand(3,4,5); rand(17,4,5)])
(20, 4, 5)
```

1 Like

Thank you. your explanation helped.