这类似于这个问题:
但现在我想在函数中增长矩阵:
function f(mat)
mat = vcat(mat, [1 2 3])
end
Run Code Online (Sandbox Code Playgroud)
现在,在这个功能之外:
mat = [2 3 4]
f(mat)
Run Code Online (Sandbox Code Playgroud)
但这不起作用.对mat内部所做的更改f不会传播到外部,因为mat内部创建了一个新内容f(请参阅http://docs.julialang.org/en/release-0.4/manual/faq/#functions).
有可能做我想要的吗?
多维数组的大小不能改变.有指针黑客共享数据,但这些不会修改原始数组的大小.
即使有可能,也要注意因为Julia矩阵是列专业,这个操作非常慢,并且需要数组的副本.
在朱,该修改在传递(即,执行计算的数据操作上的数据,而不是与数据)通常标有!.这表示程序员将修改正在处理的集合.这些类型的操作通常称为"就地"操作,因为虽然它们更难以使用和推理,但它们避免使用额外的内存,并且通常可以更快地完成.
由于矩阵存储在内存中,因此无法避免此操作的副本.因此,将此特定操作转换为就地操作并没有多少实际好处.因此,我建议不要这样做.
如果由于某种原因确实需要此操作,则不应使用矩阵,而应使用向量向量:
v = Vector{Float64}[]
push!(v, [1.0, 2.0, 3.0])
Run Code Online (Sandbox Code Playgroud)
此数据结构访问速度稍慢,但添加速度要快得多.
另一方面,从它的声音来看,您可能对更专业的数据结构感兴趣,例如a DataFrame.