多维数组遍历问题


#1

问题是这样:我有一个三维数组W,W是101010的.
然后我想稀疏化一个三维数组中的二维数组,也就是对W[10,10,1]中的随机 50个数赋值为0.
但是我刚才试了一下,比如想给二维数组中的第11个元素也就是W[2,1,1]赋值为0,
我使用W[:,:,1][11] = 0 是无效的,请问这是为什么?
如何像遍历1维数组那样遍历三维数组中的二维数组?谢谢大家


#2

W[:, :, 1] 会复制数组 W 的对应部分,在这里你应该使用引用,也就是 view:

julia> W = rand(10, 10, 10);

julia> @view(W[:, :, 1])[11] = 0; W[:, :, 1][11]
0.0

eachslice 函数可以做到,相关的函数还有 eachroweachcoleachindex,具体的使用方法请在 REPL 中输入 ?eachslice 来查询文档,比如:

julia> [sum(A) for A in eachslice(W; dims=3)] == [sum(W[:, :, i]) for i in axes(W, 3)]
true