繁体   English   中英

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

[英]Efficient way of finding the minimum/maximum row index for each column in a numpy.array with nonzero value?

我有一个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])

感谢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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM