numpy.nanmean公司元素子集

2024-06-02 08:54:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我想获取元素的子集,并快速地将nanmean应用到关联的列,而无需循环。你知道吗

对于特异性,请考虑还原数组r=[0,2,3]和数据数组

a=np.array([
             [2,3,4],
             [3,np.NaN,5],
             [16,66,666],
             [2,2,5],
             [np.NaN,3,4],
             [np.NaN,4,5],
             [np.NaN,5,4],
             [3,6,4.5],
           ])

那我要回去了

b = np.array([
             [2.5,3,4.5],
             [16,66,666],
             [2.5,4,4.5],
           ])

this question的最上面的答案通过使用^{}解决了问题(对于单个列)。对我来说不幸的是,既然nanmean不是ufunc,这个技巧就行不通了。你知道吗


Tags: 数据答案元素技巧np数组nanthis
1条回答
网友
1楼 · 发布于 2024-06-02 08:54:15

我不认为只有一行代码可以做到这一点,因为numpy中没有nan感知的ufunc。你知道吗

但是在(临时)替换a中的所有nan之后,您可以基于reduceat执行一些操作:

例如,下面是一个快速函数,可以实现您想要的功能:

def nanmean_reduceat(x, indices):
    mask = np.isnan(x)
    # use try-finally to make sure x is reset
    # to its original state even if an error is raised.
    try:
        x[mask] = 0
        return np.add.reduceat(x, indices) / np.add.reduceat(~mask, indices)
    finally:
        x[mask] = np.nan

然后你可以打电话

>>> nanmean_reduceat(a, [0, 2, 3])
array([[   2.5,    3. ,    4.5],
       [  16. ,   66. ,  666. ],
       [   2.5,    4. ,    4.5]])

希望有帮助!你知道吗

Edit:为了简洁起见,我删除了空的except块,并将return语句移到try块中。由于finally语句的工作方式,x的重置仍然在执行!

相关问题 更多 >