>>> def _nanargmin(arr, axis):
... try:
... return np.nanargmin(arr, axis)
... except ValueError:
... return np.nan
Demo:
>>> a = np.array([[np.nan]*10, np.ones(10)])
>>> _nanargmin(a, axis=1)
nan
>>> _nanargmin(a, axis=0)
array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1])
无论如何,这不太可能是你想要的。不确定你到底在追求什么。如果您只想过滤掉nan
s,然后使用布尔索引:
>>> a[~np.isnan(a)]
array([ 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.])
>>> np.argmin(_)
0
EDIT2:看起来您正在寻找屏蔽数组:
>>> a = np.vstack(([np.nan]*10, np.arange(10), np.arange(11, 1, -1)))
>>> a[2, 4] = np.nan
>>> m = np.ma.masked_array(a, np.isnan(a))
>>> np.argmin(m, axis=0)
array([1, 1, 1, 1, 1, 1, 2, 2, 2, 2])
>>> np.argmin(m, axis=1)
array([0, 0, 9])