标准型是不可能的Matrix
。您只能Vector
通过例如执行append!
或操作来调整大小push!
来调整大小。
您可以垂直连接两个矩阵,但这会分配一个新矩阵:
\njulia> x = [1 2; 3 4]\n2\xc3\x972 Matrix{Int64}:\n 1 2\n 3 4\n\njulia> y = [5 6; 7 8]\n2\xc3\x972 Matrix{Int64}:\n 5 6\n 7 8\n\njulia> [x; y]\n4\xc3\x972 Matrix{Int64}:\n 1 2\n 3 4\n 5 6\n 7 8\n
Run Code Online (Sandbox Code Playgroud)\n不支持在矩阵中添加新行的原因是,由于矩阵的内存布局,它无法有效地完成(本质上,此类操作的成本与垂直串联类似)。
\n您将需要另一个数据结构才能就地进行此类调整大小。例如DataFrame
,DataFrames.jl 支持这一点(但请注意,我上面描述的垂直串联很可能最适合您的用例):
julia> using DataFrames\n\njulia> df = DataFrame(a=[1,2], b=[11,12])\n2\xc3\x972 DataFrame\n Row \xe2\x94\x82 a b\n \xe2\x94\x82 Int64 Int64\n\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xbc\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\n 1 \xe2\x94\x82 1 11\n 2 \xe2\x94\x82 2 12\n\njulia> push!(df, [3, 13])\n3\xc3\x972 DataFrame\n Row \xe2\x94\x82 a b\n \xe2\x94\x82 Int64 Int64\n\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xbc\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\n 1 \xe2\x94\x82 1 11\n 2 \xe2\x94\x82 2 12\n 3 \xe2\x94\x82 3 13\n
Run Code Online (Sandbox Code Playgroud)\n之所以能够DataFrame
高效,是因为它在内部是一个向量的向量,因此您可以将push!
数据存储到代表一列的每个向量中。