繁体   English   中英

得到numpy.ndarray的索引

[英]Getting index of numpy.ndarray

我有一个numpy.ndarray类型的一维数组,我想知道它的最大条目索引。 找到最大值后,我用了

peakIndex = numpy.where(myArray==max)

找到峰值指数。 但是我的脚本吐出来而不是索引

peakIndex = (array([1293]),)

我希望我的代码只吐出整数1293.如何清理输出?

而不是使用numpy.where ,您可以使用numpy.argmax

peakIndex = numpy.argmax(myArray)

numpy.argmax返回单个数字,即第一次出现的最大值的展平索引。 如果myArray是多维的,您可能希望将展平的索引转换为索引元组:

peakIndexTuple = numpy.unravel_index(numpy.argmax(myArray), myArray.shape)

要查找数组的最大值,可以使用array.max()方法。 这可能比另一个答案中描述的for循环更有效,除了不是pythonic之外,它实际上并不是用python编写的。 (如果你想逐个从数组中取出项目进行比较,你可以使用ndenumerate,但是你会牺牲数组的一些性能优势)

numpy.where()将结果作为元组产生的原因是多个位置可能等于max ...并且这种边缘情况会使某些简单(如使用array [0])容易出错。 Per 是否有一个Numpy函数来返回数组中某个东西的第一个索引?

“结果是一个元组,首先是所有行索引,然后是所有列索引”。

您的示例使用1-D数组,因此您可以直接从提供的数组中获得所需的结果。 它是一个带有一个元素(一个索引数组)的元组,虽然你可以直接迭代ind_1d [0],但我将它转换为一个列表仅仅是为了便于阅读。

>>> peakIndex_1d
array([ 1. ,  1.1,  1.6,  1. ,  1.6,  0.8])
>>> ind_1d = numpy.where( peakIndex_1d == peakIndex_1d.max() )
(array([2, 4]),)
>>> list( ind_1d[0] )
[2, 4]

对于3个值等于max的2-D数组,您可以使用:

>>> peakIndex
array([[ 0. ,  1.1,  1.5],
       [ 1.1,  1.5,  0.7],
       [ 0.2,  1.2,  1.5]])
>>> indices = numpy.where( peakIndex == peakIndex.max() )
>>> ind2d = zip(indices[0], indices[1])
[(0, 2), (1, 1), (2, 2)]

暂无
暂无

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

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