Julia,使用findall重置3d数组中的第三行



我试图使用findall来获取一个1d数组的元素大于第二个1d数组的元素的索引,然后使用这些索引将第三个1d数组的相应值设置为0。兆瓦:

# create 3d array
a, b = [3;2;2], [4;3;2];
c = transpose(cat(a,b, dims = 2));
d, e = [1;2;3], [2;3;4];
f = transpose(cat(d,e, dims = 2));
g = cat(c, f, dims = 3);
g
2×3×2 Array{Int64,3}:
[:, :, 1] =
3  2  2
4  3  2
[:, :, 2] =
1  2  3
2  3  4
findall.(g[end,:,1] >= g[end-1,:,1]) 

并使用索引重置g[end,:,2]的元素,这样我最终得到

g
2×3×2 Array{Int64,3}:
[:, :, 1] =
3  2  2
4  3  2
[:, :, 2] =
1  2  3
0  0  4

谢谢。J

下面的代码给出了您所要求的答案。你只是把.放在了错误的位置。您需要逐个元素比较>操作,然后将findall应用于整个结果数组(而不是逐个元素)。

julia> g[end, findall(g[end,:,1] .> g[end-1,:,1]), 2] .= 0
2-element view(::Array{Int64,3}, 2, [1, 2], 2) with eltype Int64:
0
0
julia> g
2×3×2 Array{Int64,3}:
[:, :, 1] =
3  2  2
4  3  2
[:, :, 2] =
1  2  3
0  0  4

但是,我不会尝试将所有数据编译成一个像那样的大数组。使用三个独立的一维数组变量比在一个变量中使用三个维度更容易。再次使用上面的变量:

julia> e[b .> a] .= 0
2-element view(::Array{Int64,1}, [1, 2]) with eltype Int64:
0
0
julia> e
3-element Array{Int64,1}:
0
0
4

相关内容

  • 没有找到相关文章

最新更新