# How do I create a 1,2,3 3x1 Matrix?

While introducing Arrays, I want to explain the difference in Julia between a normal column vector and a matrix with a single column… Is there a way to create a one-column matrix like `b = collect([1 2 3]')` in a simpler way (and without using rand, zeros, the Array constructor with undef/nothing…) ?

``````reshape([1:3;],3,1)
``````

Or even

``````reshape([1:3;], :, 1)
``````

if you do not want to care about number of elements.

1 Like

There is no way to create it with just using the brackets syntax without introducing other functions, including reshape ?

`[ i for i=1:3, j=1:1]` but it is not compact.

FYI, probably still not what you looking for though.

``````[1:3 1:3][:, ]
``````

`Matrix{Float64}(undef, 3, 1)`
Does that work for you?

normally I write `hcat(1:3)`

3 Likes

Or maybe `fill(0,(3,1))`.

yeah, thanks everyone, I think the answer is that it is not possible to use some simple `a = [1 ; 2 ; 3 ;]` like syntax to create a one-column matrix, as it is reinterpreted as a column vector… I’ll use one of the methods you posted, it is just that they all use already some other concepts…

`a=[1 2 3]'`

2 Likes
``````[1, 2, 3][:,:]
3×1 Matrix{Int64}:
1
2
3
``````

And if @DNF was online, he would likely suggest:

``````permutedims([1 2 3])
``````
4 Likes

The limitation is that in bracket notation a space is used to indicate `hcat` and it is ignored if you have only one argument passed.

1 Like

One wouldn’t recommend this, but it is interesting:

``````using LinearAlgebra
julia> [1, 2, 3]*I
3×1 Matrix{Int64}:
1
2
3
``````

Note that there is a PR https://github.com/JuliaLang/julia/pull/33697, which, if I understand it correctly, means that `a = [1 ; 2 ; 3 ;;]` may be a future syntax for this. Specifically see the proposed `NEWS` entry.

4 Likes

I thought a Vector was a synonym for a 1 Column Matrix? Why would there be a need to differentiate?

1 Like

There are many reasons, e.g.:

• they have different `ndims`
• you can resize `Vector`, but you cannot resize `Matrix`
• there are functions that accept only `Vector` or only `Matrix` (especially in `LinearAlgebra`)
• Tables.jl tables usually require `AbstractVector`, but disallow 1-column `AbstractMatrix` as columns
1 Like

Mathematically they are the same, but they are different objects in Julia. `[1,2,3]` is a uni-dimensional array, `collect([1 2 3]')` is a two- dimensional array where “it happens” that the second dimension has size 1, i.e. there is only one column. So, if a function requires `AbstractArray{T,1}` the first will fit, but the second will not.
Note that this possible confusion doesn’t arise with row vectors, as all row vectors in Julia have 2 dimensions.

https://syl1.gitbook.io/julia-language-a-concise-tutorial/language-core/data-types#multidimensional-and-nested-arrays

You can also use

``````Matrix([1,2,3]')
``````

if that’s clearer than `collect`

@tomerarnon, you probably meant:

``````Matrix([1 2 3]')
3×1 Matrix{Int64}:
``````
1 Like