如何有效地调整朱莉娅矩阵的大小?

هنر*_*تان 7 arrays julia

沿第一维调整矩阵大小(即添加行)的有效方法是什么?

Bog*_*ski 7

标准型是不可能的Matrix。您只能Vector通过例如执行append!或操作来调整大小push!来调整大小。

\n

您可以垂直连接两个矩阵,但这会分配一个新矩阵:

\n
julia> 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 支持这一点(但请注意,我上面描述的垂直串联很可能最适合您的用例):

\n
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!数据存储到代表一列的每个向量中。

\n