Matrix 通过切片数字创建Julia矩阵

Matrix 通过切片数字创建Julia矩阵,matrix,julia,Matrix,Julia,在Julia中,您可以创建如下矩阵: A = [1:3 4:6 7:9] # 3x3 Matrix # 1 4 7 # 2 5 8 # 3 6 9 A[3, 3] # 9 您可以这样调用A的每个索引: A = [1:3 4:6 7:9] # 3x3 Matrix # 1 4 7 # 2 5 8 # 3 6 9 A[3, 3] # 9 但是这条线 A = [1:3] # should return 3x1 Matrix, but does not! 不会按预期返回3x1矩阵!它只返回一

在Julia中,您可以创建如下矩阵:

A = [1:3 4:6 7:9] # 3x3 Matrix
# 1 4 7
# 2 5 8
# 3 6 9
A[3, 3] # 9
您可以这样调用A的每个索引:

A = [1:3 4:6 7:9] # 3x3 Matrix
# 1 4 7
# 2 5 8
# 3 6 9
A[3, 3] # 9
但是这条线

A = [1:3] #  should return 3x1 Matrix, but does not!
不会按预期返回3x1矩阵!它只返回一个由一个元素组成的数组

typeof(A) # Array{UnitRange{Int64},1}
我这里出了什么错


感谢您制作一个3×1矩阵,正确的语法是

julia> hcat(1:3)
3×1 Array{Int64,2}:
 1
 2
 3
要做到这一点,而不为范围分配额外的空间(即创建一个惰性矩阵),可以这样做

julia> reshape(1:3, 3, 1)
3×1 Base.ReshapedArray{Int64,2,UnitRange{Int64},Tuple{}}:
 1
 2
 3

您使用的语法,
[1:3]
构造了单位范围的单元素向量。

要生成3×1矩阵,正确的语法是

julia> hcat(1:3)
3×1 Array{Int64,2}:
 1
 2
 3
要做到这一点,而不为范围分配额外的空间(即创建一个惰性矩阵),可以这样做

julia> reshape(1:3, 3, 1)
3×1 Base.ReshapedArray{Int64,2,UnitRange{Int64},Tuple{}}:
 1
 2
 3

您使用的语法,
[1:3]
构造了一个单位范围的单元素向量。

我猜您来自Matlab背景。。。请注意,Matlab和类似语言针对矩阵进行了优化,因此几乎所有东西都是矩阵或数组。Julia有一个完全充实的类型系统,因此除了专门用于各种操作的数组之外,还可能遇到许多其他类型。在这种情况下,
1:3
返回类型
UnitRange{Int64}
,因此
[1:3]
使用类型为
UnitRange{Int64}
的单个元素创建一个向量。类型
UnitRange{Int64}
通常用于,例如索引到数组。@ColinTBowers-thnaks,明白了!你能澄清一下吗?要创建3x1矩阵还是长度为3的向量?他们在朱莉娅身上不是一回事。你得到的大多数答案都是关于如何做前者的。@DNF实际上我只是想知道为什么在julia中不能创建一个3x1矩阵或将其命名为向量,就像创建高维矩阵一样?我的意思是,在我眼里,这有多奇怪?我的意思是,例如,在python+numpy中,创建矩阵的相同方法始终会给出相同的结果。为什么不在julia中?
[x]
的意思是“用
x
作为元素制作一个数组。”如果
[1:3]
制作了一个
3x1
矩阵,那么它将与该规则不一致。我认为真正的问题是,
[abc]
是否是数组串联的好语法。我猜你来自Matlab背景。。。请注意,Matlab和类似语言针对矩阵进行了优化,因此几乎所有东西都是矩阵或数组。Julia有一个完全充实的类型系统,因此除了专门用于各种操作的数组之外,还可能遇到许多其他类型。在这种情况下,
1:3
返回类型
UnitRange{Int64}
,因此
[1:3]
使用类型为
UnitRange{Int64}
的单个元素创建一个向量。类型
UnitRange{Int64}
通常用于,例如索引到数组。@ColinTBowers-thnaks,明白了!你能澄清一下吗?要创建3x1矩阵还是长度为3的向量?他们在朱莉娅身上不是一回事。你得到的大多数答案都是关于如何做前者的。@DNF实际上我只是想知道为什么在julia中不能创建一个3x1矩阵或将其命名为向量,就像创建高维矩阵一样?我的意思是,在我眼里,这有多奇怪?我的意思是,例如,在python+numpy中,创建矩阵的相同方法始终会给出相同的结果。为什么不在julia中?
[x]
的意思是“用
x
作为元素制作一个数组。”如果
[1:3]
制作了一个
3x1
矩阵,那么它将与该规则不一致。我认为真正的问题是
[abc]
是否是数组串联的好语法。