我想将2D数组用作3D数组的索引,并将其用作到3D数组的索引轴0的高度图。是否有一个有效的“ numpy方式”做到这一点?在我的示例中,我想将每个对应的支柱2中的所有高度都设置为等于或大于高度图的高度零。例: 3D阵列:
[[[1, 1, 1],
[1, 1, 1],
[1, 1, 1]],
[[1, 1, 1],
[1, 1, 1],
[1, 1, 1]],
[[1, 1, 1],
[1, 1, 1],
[1, 1, 1]],
[[1, 1, 1],
[1, 1, 1],
[1, 1, 1]]]
2D数组(高度图):
[[0, 1, 2],
[2, 3, 4],
[2, 0, 0]]
所需的输出:
[[[0, 1, 1],
[1, 1, 1],
[1, 0, 0]],
[[0, 0, 1],
[1, 1, 1],
[1, 0, 0]],
[[0, 0, 0],
[0, 1, 1],
[0, 0, 0]],
[[0, 0, 0],
[0, 0, 1],
[0, 0, 0]]]
到目前为止,我已经通过
中的for python循环实现了此功能for y in range(arr2d.shape[0]):
for x in range(arr2d.shape[1]):
height = arr2d[y, x]
arr3d[height:, y, x] = 0
但这似乎效率很低,我觉得可能有更好的方法可以做到这一点。
答案 0 :(得分:1)
从填充数组的快速方法中汲取灵感:
In [104]: (np.arange(4)[:,None,None]<arr2d).astype(int)
Out[104]:
array([[[0, 1, 1],
[1, 1, 1],
[1, 0, 0]],
[[0, 0, 1],
[1, 1, 1],
[1, 0, 0]],
[[0, 0, 0],
[0, 1, 1],
[0, 0, 0]],
[[0, 0, 0],
[0, 0, 1],
[0, 0, 0]]])