我有一个 numpy.ndarray 类型的一维数组,我想知道它的最大条目的索引。找到最大值后,我使用了
peakIndex = numpy.where(myArray==max)
找到峰值的索引。但不是索引,而是我的脚本吐出
peakIndex = (array([1293]),)
我希望我的代码只输出整数 1293。如何清理输出?
我有一个 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() 将结果作为元组产生的原因是,不止一个位置可能等于最大值......而且正是这种边缘情况会使一些简单的事情(比如使用数组 [0])容易出现错误。Per是否有一个 Numpy 函数来返回数组中某物的第一个索引?,
“结果是一个元组,首先是所有行索引,然后是所有列索引”。
您的示例使用一维数组,因此您可以直接从提供的数组中获得所需的结果。它是一个具有一个元素(一个索引数组)的元组,尽管您可以直接迭代 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 个值等于最大值的二维数组,您可以使用:
>>> 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)]