【问题标题】:numpy: difference between NaN and masked arraynumpy:NaN 和掩码数组之间的区别
【发布时间】:2015-08-12 06:39:13
【问题描述】:

在 numpy 中有两种方法可以标记缺失值:我可以使用 NaNmasked array。我知道使用 NaN (可能)更快,而掩码数组提供更多功能(哪个?)。

我想我的问题是我是否/何时应该使用其中一个? np.NaNregular array vs. a masked array 中的用例是什么?

我确信答案一定在那里,但我找不到它......

【问题讨论】:

    标签: python numpy nan


    【解决方案1】:

    据我了解,NaN 表示任何不是数字的东西,而掩码数组标记缺失值或数字但对您的数据集无效的值。

    希望对你有帮助。

    【讨论】:

      【解决方案2】:

      区别在于两个结构所保存的数据。

      使用regular array with np.nan,无效值后面没有数据。

      使用masked array,您可以初始化一个完整的数组,然后在其上应用掩码,使某些值显得无效。 numpy.ma 模块提供了一些方法,因此您不必处理 np.nan 行为(例如,np.nan == np.nan 始终是 False 等)

      如果您有一个永远不需要将值放置在无效单元格中的数组,请使用前者。您始终可以使用np.nan 和一些索引技术来复制复杂的操作,但这就是掩码数组的用途。

      【讨论】:

      • 举一个具体的例子:当使用带有 NaN 的普通 ndarray 时,当数组包含至少一个 NaN 元素时,调用 myarray.mean() 会给你 NaN。当通过将相应的掩码值设置为 True 使相同的值无效时,myarray.mean() 将执行您想要的操作,从计算中省略 NaN: myarray = numpy.ma.array([1,2,numpy.nan] ,mask=numpy.zeros((3,)) myarray.mean() 给你 1.5。不使用掩码数组,myarray.mean() = numpy.nan
      • @Dr.HillierDániel 但是对于这种情况或类似情况,您可以使用 np.nanmean() 或等效项
      【解决方案3】:

      请记住,jrmyp 提到的奇怪的 np.nan 行为包括意外结果,例如在使用 statsmodels(例如 ttest)或 numpy 模块(例如平均值)的函数时。根据经验,大多数这些函数都有 NaN 的变通方法,但它有可能让你发疯一段时间。这似乎是尽可能屏蔽数组的理由。

      【讨论】:

        猜你喜欢
        • 2020-05-28
        • 2019-10-12
        • 2013-07-20
        • 1970-01-01
        • 1970-01-01
        • 2012-04-17
        • 2013-08-11
        • 2017-05-28
        • 1970-01-01
        相关资源
        最近更新 更多