如何将一个向量作为行添加到Julia矩阵中?

12

初始时我有一个空矩阵:

m = Matrix(0, 3)

还有一行我想要添加的内容:

v = [2,3]

我试图做这件事:

[m v]

但是我遇到了一个错误

 ERROR: ArgumentError: number of rows of each array must match

怎样才是正确的做法?

3个回答

10

那是因为您的矩阵大小不匹配。具体来说,向量v没有足够的列来匹配矩阵m,并且它被转置了。

因此,这样做行不通。

m = Matrix(0, 3)
v = [2,3]
m = cat(1, m, v)  # or a = [m; v]
>> ERROR: DimensionMismatch("mismatch in dimension 2 (expected 3 got 1)")

然而这确实做到了

m = Matrix(0, 3)
v = [2 3 4]
m = cat(1, m, v)  # or m = [m; v]
>> 1x3 Array{Any,2}:
>>   2  3  4

如果您再次运行它,它会创建另一行。

m = cat(1, m, v)  # or m = [m; v]
>> 2x3 Array{Any,2}:
>>   2  3  4
>>   2  3  4

2
或者如果您想保持v = [2,3,4]的格式,您可以使用m = [m; v']来添加行。 - Rob

6
使用vcat(垂直连接)函数:
help?> vcat
search: vcat hvcat VecOrMat DenseVecOrMat StridedVecOrMat AbstractVecOrMat levicivita is_valid_char @vectorize_2arg

  vcat(A...)

  Concatenate along dimension 1

注意需要转置向量v,即v',否则会出现DimensionMismatch错误:

julia> v = zeros(3)
3-element Array{Float64,1}:
 0.0
 0.0
 0.0

julia> m = ones(3, 3)
3x3 Array{Float64,2}:
 1.0  1.0  1.0
 1.0  1.0  1.0
 1.0  1.0  1.0

julia> vcat(m, v')    # '
4x3 Array{Float64,2}:
 1.0  1.0  1.0
 1.0  1.0  1.0
 1.0  1.0  1.0
 0.0  0.0  0.0

julia> v'    # '
1x3 Array{Float64,2}:
 0.0  0.0  0.0

julia> vcat(m, v)
ERROR: DimensionMismatch("mismatch in dimension 2 (expected 3 got 1)")
 in cat_t at abstractarray.jl:850
 in vcat at abstractarray.jl:887

注意:这里的注释# '只是为了让语法高亮能够正常工作。


0

这不是 Matrix 在 Julia 中创建一个二维数组吗?如果你尝试使用 m =[0, 3],它会为你创建一个一维的 Vector,你可以通过 [m; v] 来添加它。

我认为使用 [m v] 也会创建一个二维数组,来自 Julia 文档的说明。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接