初始时我有一个空矩阵:
m = Matrix(0, 3)
还有一行我想要添加的内容:
v = [2,3]
我试图做这件事:
[m v]
但是我遇到了一个错误
ERROR: ArgumentError: number of rows of each array must match
怎样才是正确的做法?
初始时我有一个空矩阵:
m = Matrix(0, 3)
还有一行我想要添加的内容:
v = [2,3]
我试图做这件事:
[m v]
但是我遇到了一个错误
ERROR: ArgumentError: number of rows of each array must match
怎样才是正确的做法?
那是因为您的矩阵大小不匹配。具体来说,向量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
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
注意:这里的注释# '
只是为了让语法高亮能够正常工作。
这不是 Matrix
在 Julia 中创建一个二维数组吗?如果你尝试使用 m =[0, 3],它会为你创建一个一维的 Vector
,你可以通过 [m; v]
来添加它。
我认为使用 [m v]
也会创建一个二维数组,来自 Julia 文档的说明。
v = [2,3,4]
的格式,您可以使用m = [m; v']
来添加行。 - Rob