我有一个 3d numpy 数组。我想找到沿三个轴的每个非零元素元素的最大 x
、y
和 z
坐标数组。我怎样才能做到这一点?
因此对于下面的示例 x=1, y=2, z=1
array([[[1, 1, 0],
[1, 1, 0],
[0, 0, 0]],
[[0, 0, 0],
[1, 0, 0],
[1, 0, 0]],
[[0, 0, 0],
[0, 0, 0],
[0, 0, 0]]])
最佳答案
使用 np.nonzero
获取非零元素的索引并将它们按列堆叠起来 np.column_stack
最后找到 .max(0)
沿列的 max
。实现看起来像这样 -
np.column_stack((np.nonzero(A))).max(0)
好像有一个内置函数np.argwhere
用于获取二维数组中堆叠的所有非零元素的索引。因此,你可以简单地做 -
np.argwhere(A).max(0)
示例运行 -
In [50]: A
Out[50]:
array([[[1, 1, 0],
[1, 1, 0],
[0, 0, 0]],
[[0, 0, 0],
[1, 0, 0],
[1, 0, 0]],
[[0, 0, 0],
[0, 0, 0],
[0, 0, 0]]])
In [51]: np.column_stack((np.nonzero(A))).max(0)
Out[51]: array([1, 2, 1])
In [52]: np.argwhere(A).max(0)
Out[52]: array([1, 2, 1])
关于python - 沿每个轴查找非零元素的最大索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33265810/