我有一个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]]])
答案 0 :(得分:5)
使用np.nonzero
获取非零元素的索引,并将其堆叠在np.column_stack
的列中,最后在.max(0)
的列中找到max
。实现看起来像这样 -
np.column_stack((np.nonzero(A))).max(0)
看起来有一个内置函数np.argwhere
,用于获取堆叠在2D
数组中的所有非零元素的索引。因此,你可以简单地做 -
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])
答案 1 :(得分:0)
>>> tuple(coords.max() for coords in numpy.nonzero(A))
(1, 2, 1)