【问题标题】:Function to ignore nan values and do a numpy.polyval忽略 nan 值并执行 numpy.polyval 的函数
【发布时间】:2018-11-05 04:52:46
【问题描述】:

我正在尝试编写一个函数,在其中提供一个 mxn 数组,它的目标是遍历数组并为每个值执行 numpy.polyval。数组将包含一些 nan 值,因此我希望函数以与原始数组相同的顺序返回 nan 值。 到目前为止,这是我的功能:

def polyval_NaN(p,data):
    m,n = data.shape
    data2 = data
    for i in np.arange(1,m):
        for j in np.arange(1,n):
            if np.isnan(data2[i,j]) == False:
                data2[i,j] = np.polyval(p,data[i,j])
    return data2

感谢您的帮助

【问题讨论】:

    标签: python python-2.7 numpy iteration nan


    【解决方案1】:

    像这样使用布尔索引:

    >>> import numpy as np
    >>> 
    >>> p = np.array((4,5,3))
    >>> a = np.arange(12.).reshape(3,4)
    >>> a.ravel()[[2,5,7]] = np.nan
    >>> a
    array([[ 0.,  1., nan,  3.],
           [ 4., nan,  6., nan],
           [ 8.,  9., 10., 11.]])
    >>> 
    >>> result = np.full_like(a, np.nan)
    >>> good = ~np.isnan(a)
    >>> result[good] = np.polyval(p, a[good])
    >>> 
    >>> result
    array([[  3.,  12.,  nan,  54.],
           [ 87.,  nan, 177.,  nan],
           [299., 372., 453., 542.]])
    

    【讨论】:

    • 我如何将它合并到我的函数中,我试图概括它,而不仅仅是做一个特定的案例
    • @Heavens93 来吧,你可以自己解决。从字面上看,它就像选择名称、缩进和添加返回语句一样简单,
    • 这不适用于度数为 1 的 polyval,即 p=1
    • @Heavens93 试试p=[1].
    猜你喜欢
    • 2021-06-15
    • 2018-07-05
    • 2019-09-24
    • 1970-01-01
    • 1970-01-01
    • 2016-03-28
    • 2016-10-11
    • 1970-01-01
    • 2019-02-09
    相关资源
    最近更新 更多