问题是这样:我有一个三维数组W,W是101010的.
然后我想稀疏化一个三维数组中的二维数组,也就是对W[10,10,1]中的随机 50个数赋值为0.
但是我刚才试了一下,比如想给二维数组中的第11个元素也就是W[2,1,1]赋值为0,
我使用W[:,:,1][11] = 0 是无效的,请问这是为什么?
如何像遍历1维数组那样遍历三维数组中的二维数组?谢谢大家
W[:, :, 1]
会复制数组 W
的对应部分,在这里你应该使用引用,也就是 view:
julia> W = rand(10, 10, 10);
julia> @view(W[:, :, 1])[11] = 0; W[:, :, 1][11]
0.0
eachslice
函数可以做到,相关的函数还有 eachrow
、eachcol
、eachindex
,具体的使用方法请在 REPL 中输入 ?eachslice
来查询文档,比如:
julia> [sum(A) for A in eachslice(W; dims=3)] == [sum(W[:, :, i]) for i in axes(W, 3)]
true
1 个赞