【发布时间】:2020-05-13 13:16:29
【问题描述】:
我正在尝试使用 for 循环更新数组,并将数组的“当前”版本存储在循环的同一迭代中,如下所示:
struct store
a::Float64
mat::AbstractArray
end
function foo(x::AbstractArray)
m, n = size(x)
col = Array{store}(undef, m, n)
A = zeros(m, n)
for i in eachindex(col)
A[i] = 1.0
print(A)
col[i] = store(x[i], A)
A[i] = 0
end
return col
end
我添加了一个 print() 来检查数组是否以我想要的方式更新(它是)。我要存储的矩阵除索引当前位置的“1”外全为零。我得到的结果是:
foo(rand(2,2))
2×2 Array{store,2}:
store(0.447322, [0.0 0.0; 0.0 0.0]) store(0.949405, [0.0 0.0; 0.0 0.0])
store(0.56251, [0.0 0.0; 0.0 0.0]) store(0.156834, [0.0 0.0; 0.0 0.0])
可以通过将数组“A”放在循环中来达到我想要的效果,但是效率也很低。
有更好的方法吗?
谢谢!
【问题讨论】:
-
如果你关心效率,你应该避免在你的结构定义中使用抽象字段类型。如果要允许多种数组,请使用参数结构。 (还有一条建议:类型名称使用大写,而不是小写。)
标签: arrays for-loop matrix indexing julia