当前位置: 首页 > 面试题库 >

在numpy数组中内插NaN值

邬飞捷
2023-03-14
问题内容

有没有一种快速的方法用(例如)线性插值替换numpy数组中的所有NaN值?

例如,

[1 1 1 nan nan 2 2 nan 0]

将被转换成

[1 1 1 1.3 1.6 2 2  1  0]

问题答案:

让我们首先定义一个简单的辅助函数,以使其更直接地处理NaN的索引和逻辑索引:

import numpy as np

def nan_helper(y):
    """Helper to handle indices and logical indices of NaNs.

    Input:
        - y, 1d numpy array with possible NaNs
    Output:
        - nans, logical indices of NaNs
        - index, a function, with signature indices= index(logical_indices),
          to convert logical indices of NaNs to 'equivalent' indices
    Example:
        >>> # linear interpolation of NaNs
        >>> nans, x= nan_helper(y)
        >>> y[nans]= np.interp(x(nans), x(~nans), y[~nans])
    """

    return np.isnan(y), lambda z: z.nonzero()[0]

现在nan_helper(.)可以像这样使用:

>>> y= array([1, 1, 1, NaN, NaN, 2, 2, NaN, 0])
>>>
>>> nans, x= nan_helper(y)
>>> y[nans]= np.interp(x(nans), x(~nans), y[~nans])
>>>
>>> print y.round(2)
[ 1.    1.    1.    1.33  1.67  2.    2.    1.    0.  ]

-–
尽管指定一个单独的函数来执行以下操作似乎有点过头了:

>>> nans, x= np.isnan(y), lambda z: z.nonzero()[0]

它最终将支付股息。

因此,每当您处理与NaNs相关的数据时,只需将其所需的所有(新的与NaN相关的新功能)封装在某些特定的辅助函数下即可。您的代码库将更易于理解,因为它遵循易于理解的习惯用法。

实际上,内插法是了解如何完成NaN处理的一个很好的上下文,但是在其他各种上下文中也使用了类似的技术。



 类似资料:
  • 问题内容: 有没有一种方法可以将NaN存储在整数的Numpy数组中?我得到: 问题答案: 不,至少在当前版本的NumPy中不能。A是 仅对 float数组的特殊值。 有人在谈论引入一个特殊的位,该位将允许非浮点数组存储实际上与a相对应的内容,但到目前为止(2012/10),这仅仅是个话题。 同时,您可能需要考虑使用该程序包:您可以使用特殊值表示无效值,而不是选择像-99999这样的无效整数。

  • 问题内容: 在numpy数组中找到最大连续重复nan的最佳方法是什么? 例子: 输入1: 输出1: 输入2: 输出2: 问题答案: 这是一种方法- 这是一个改进的版本- 基准测试-

  • 问题内容: 对于我的单元测试,我想检查两个数组是否相同。简化示例: 这是行不通的,因为。最好的进行方法是什么? 问题答案: 或者您可以使用或用: 编辑 由于您正在使用它进行单元测试,因此裸露(而不是将其包装成get )可能更自然。

  • 问题内容: 示例问题 作为一个简单的示例,请考虑以下定义的numpy数组: 其中,像这样在控制台输出: 我现在想按行“向前填充” array中的值。我的意思是用左侧最接近的有效值替换每个值。所需的结果如下所示: 到目前为止尝试过 我试过使用for循环: 我还尝试过使用熊猫数据框作为中间步骤(因为熊猫数据框具有非常整洁的内置方法用于正向填充): 以上两种策略都能产生预期的结果,但是我一直在想:仅使用

  • 问题内容: 我想在numpy数组中设置特定值(以将它们从按行均值计算中排除)。 我试过了 看着,我只会看到我的期望。 我想到了一个替代方案: 没发生什么事。我究竟做错了什么? 问题答案: 将适当元素设置为NaN的矢量化方法 @unutbu的解决方案必须摆脱您得到的值错误。如果您希望获得性能,可以这样使用- 样品运行- 向量化方法可直接计算适当元素的按行平均值 如果要获取掩盖的平均值,则可以修改较早

  • 问题内容: 我有一个numpy数组,其中大多数都用实数填充,但是其中也包含一些值。 如何用列的平均值替换s? 问题答案: 无需循环: