[英]Finding index of maximum value in array with NumPy
I would like to find a maximum in a float64
array, excluding nan
values. 我想在
float64
数组中找到一个最大值,不包括nan
值。
I saw np.nanmax
function but it doesn't give the index corresponding to the found value. 我看到了
np.nanmax
函数,但它没有给出与找到的值对应的索引。
it 's quite strange to scan after to the value specially the function necessarily use the index ??? 特别是函数必须使用索引后扫描后很奇怪??? Can't it be a mistake searching like that .
这样搜索不是一个错误。
isn't there a way to recover the index directly ? 是不是有办法直接恢复索引?
Numpy has an argmax
function that returns just that, although you will have to deal with the nan
s manually. Numpy有一个
argmax
函数可以返回,尽管你必须手动处理nan
。 nan
s always get sorted to the end of an array, so with that in mind you can do: nan
总是被排序到数组的末尾,所以考虑到这一点,你可以这样做:
a = np.random.rand(10000)
a[np.random.randint(10000, size=(10,))] = np.nan
a = a.reshape(100, 100)
def nanargmax(a):
idx = np.argmax(a, axis=None)
multi_idx = np.unravel_index(idx, a.shape)
if np.isnan(a[multi_idx]):
nan_count = np.sum(np.isnan(a))
# In numpy < 1.8 use idx = np.argsort(a, axis=None)[-nan_count-1]
idx = np.argpartition(a, -nan_count-1, axis=None)[-nan_count-1]
multi_idx = np.unravel_index(idx, a.shape)
return multi_idx
>>> nanargmax(a)
(20, 93)
You should use np.where
你应该使用
np.where
In [17]: a=np.random.uniform(0, 10, size=10)
In [18]: a
Out[18]:
array([ 1.43249468, 4.93950873, 7.22094395, 1.20248629, 4.66783985,
6.17578054, 4.6542771 , 7.09244492, 7.58580515, 5.72501954])
In [20]: np.where(a==a.max())
Out[20]: (array([8]),)
This also works for 2 arrays, the returned value, is the index. 这也适用于2个数组,返回值是索引。 Here we create a range from 1 to 9:
这里我们创建一个从1到9的范围:
x = np.arange(9.).reshape(3, 3)
This returns the index, of the the items that equal 5: 这将返回等于5的项的索引:
In [34]: np.where(x == 5)
Out[34]: (array([1]), array([2])) # the first one is the row index, the second is the column
You can use this value directly to slice your array: 您可以直接使用此值来切割数组:
In [35]: x[np.where(x == 5)]
Out[35]: array([ 5.])
You want to use numpy.nanargmax 你想使用numpy.nanargmax
The documentation provides some clear examples. 该文档提供了一些明确的示例。
a = np.array([[np.nan, 4], [2, 3]])
print np.argmax(a)
0
print np.nanargmax(a)
1
np.nanargmax(a, axis=0)
array([1, 0])
np.nanargmax(a, axis=1)
array([1, 1])
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.