#!/usr/bin/env python
# Solution utilizing numpy masking of zero value in array
import numpy as np
import numpy.ma as ma
a = [0,1,2,3]
a = np.array(a)
print "your array: ",a
# the non-zero minimum value
minval = np.min(ma.masked_where(a==0, a))
print "non-zero minimum: ",minval
# the position/index of non-zero minimum value in the array
minvalpos = np.argmin(ma.masked_where(a==0, a))
print "index of non-zero minimum: ", minvalpos
4条答案
按热度按时间yduiuuwa1#
np.nonzero(theta)
返回非零值的索引。在您的示例中,它返回:[1,2,3]
然后,theta[np.nonzero(theta)]返回值
[1,2,3]
当您对上一个输出执行
np.argmin(theta[np.nonzero(theta)])
时,它会返回值1
的索引0。因此,正确的方法是:
i,j = np.where( theta==np.min(theta[np.nonzero(theta)]))
其中i,j
是原始numpy数组的最小非零元素的索引theta[i,j]
或theta[i]
给出该索引处的相应值。dauxcl2d2#
vs91vp4v3#
我认为你@艾米丽非常接近正确答案。你说:
np.argmin(theta[np.nonzero(theta)])
给出了一个零索引,这显然是不正确的。我认为这是因为它首先创建了一个非零元素的新数组。最后一句是正确的=〉第一句是错误的,因为它应该给予新数组中的索引。
现在,让我们从旧(原始)数组中提取正确的索引:
或:
对于原始数组任意维数。
kupeojn64#
ndim溶液
解释
1.屏蔽掉零会创建
t0
。还有其他方法,请参见性能图。1.查找最小位置,返回展平(1D)索引。
unravel_index
修复了此问题,尚未建议使用。掩码:
i = np.unravel_index(np.ma.masked_where(a==0, a).argmin(), a.shape)
名称:
i = np.unravel_index(np.nanargmin(np.where(a!=0, a, np.nan)), a.shape)
最大值:
i = np.unravel_index(np.where(a!=0, a, a.max()+1).argmin(), a.shape)