查找具有非零值的numpy.array中每一列的最小/最大行索引的有效方法?

时间:2019-02-14 12:56:52

标签: python performance numpy min

我有2D numpy数组iarr,它来自图片的单色。

我想在每列中找到具有非零值的最小/最大行索引。如果列中没有非零值,则无需考虑该列。 我有一个有效的解决方案,但是速度很慢。我目前的解决方案是

img = Image.open('nameofimage.jpg')
iarr = numpy.array(img)[:,:,0]

nonz = numpy.nonzero(iarr)
colinds = numpy.unique(nonz[1])
minrowinds = numpy.array([numpy.min(nonz[0][nonz[1]==cind]) for cind in colinds])

1 个答案:

答案 0 :(得分:0)

借助yatu的指针,我现在可以自己回答这个问题。

colinds = numpy.unique(nonz[1])

minrowinds = numpy.argmax((iarr>0),axis=0)[colinds]

对于最大索引,我必须首先翻转数组,因为np.argmax始终会首先出现最大值。

maxrowinds = numpy.argmax(numpy.flip((iarr>0),0),axis=0)[colinds]
maxrowinds = iarr.shape[0] - maxrowinds