找到沿每个轴的最大非零元素索引

时间:2015-10-21 17:38:28

标签: python arrays numpy

我有一个3d numpy数组。我想在阵列的三个轴中找到非零元素元素的最大xyz坐标。我怎么能这样做?

因此,对于下面的示例,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]]])

2 个答案:

答案 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)

使用numpy.nonzero

完成
>>> tuple(coords.max() for coords in numpy.nonzero(A))
(1, 2, 1)