gpt4 book ai didi

matrix - 在 Julia 中向函数内部的矩阵添加一行(并将更改传播到外部)?

转载 作者:行者123 更新时间:2023-12-02 00:07:13 25 4
gpt4 key购买 nike

这与这个问题类似:

Add a row to a matrix in Julia?

但现在我想在函数内增长矩阵:

function f(mat)
mat = vcat(mat, [1 2 3])
end

现在,在此函数之外:

mat = [2 3 4]
f(mat)

但这行不通。对 f 内部的 mat 所做的更改不会传播到外部,因为在 f 内部创建了一个新的 mat (请参阅http://docs.julialang.org/en/release-0.4/manual/faq/#functions)。

可以做我想做的事吗?

最佳答案

多维数组的大小不能更改。有pointer hacks共享数据,但这些不会修改原始数组的大小。

<小时/>

即使可能,请注意,由于 Julia 矩阵是列主矩阵,因此此操作非常慢,并且需要数组的副本。

在 Julia 中,修改传入数据的操作(即对数据执行计算,而不是对数据执行计算)通常用 ! 标记>。这向程序员表明正在处理的集合将被修改。这些类型的操作通常称为“就地”操作,因为尽管它们更难使用和推理,但它们避免使用额外的内存,并且通常可以更快地完成。

由于矩阵在内存中的存储方式,无法避免此操作的复制。因此,将这种特定操作转变为就地操作并没有太大的实际好处。因此,我建议不要这样做。

<小时/>

如果您出于某种原因确实需要此操作,则不应使用矩阵,而应使用向量的向量:

v = Vector{Float64}[]
push!(v, [1.0, 2.0, 3.0])

此数据结构的访问速度稍慢,但添加速度快得多

另一方面,从听起来来看,您可能对更专业的数据结构感兴趣,例如 DataFrame .

关于matrix - 在 Julia 中向函数内部的矩阵添加一行(并将更改传播到外部)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36728963/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com