gpt4 book ai didi

python - 如果列全部为 nan,则使 numpy.nanargmin 返回 nan

转载 作者:行者123 更新时间:2023-12-01 05:21:13 24 4
gpt4 key购买 nike

是否可以使用numpy.nanargmin,以便它在仅包含nans的列上返回numpy.nan。现在,当发生这种情况时,它会引发 ValueError。而且我不能使用 numpy.argmin ,因为当列中只有几个 nan 时,这会失败。

http://docs.scipy.org/doc/numpy/reference/generated/numpy.nanargmin.html表示针对全 nan 切片引发 ValueError 。在这种情况下,我希望它返回 numpy.nan (只是为了进一步用 nan 掩盖“非数据”)

接下来的一点就是这样做的,但是速度超慢并且不是真正的Pythonic:

for i in range(R.shape[0]):
bestindex = numpy.nanargmin(R[i,:])
if(numpy.isnan(bestindex)):
bestepsilons[i]=numpy.nan
else:
bestepsilons[i]=epsilon[bestindex]

接下来的一点也有效,但前提是不涉及所有 nan 列:

ar = numpy.nanargmin(R, axis=1)
bestepsilons = epsilon[ar]

所以理想情况下,我希望最后一点也能与全纳米列一起使用

最佳答案

>>> def _nanargmin(arr, axis):
... try:
... return np.nanargmin(arr, axis)
... except ValueError:
... return np.nan

演示:

>>> 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,则使用 bool 索引:

>>> 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])

关于python - 如果列全部为 nan,则使 numpy.nanargmin 返回 nan,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22321995/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com