【发布时间】:2015-08-12 06:39:13
【问题描述】:
在 numpy 中有两种方法可以标记缺失值:我可以使用 NaN 或 masked array。我知道使用 NaN (可能)更快,而掩码数组提供更多功能(哪个?)。
我想我的问题是我是否/何时应该使用其中一个?
np.NaN 在regular array vs. a masked array 中的用例是什么?
我确信答案一定在那里,但我找不到它......
【问题讨论】:
在 numpy 中有两种方法可以标记缺失值:我可以使用 NaN 或 masked array。我知道使用 NaN (可能)更快,而掩码数组提供更多功能(哪个?)。
我想我的问题是我是否/何时应该使用其中一个?
np.NaN 在regular array vs. a masked array 中的用例是什么?
我确信答案一定在那里,但我找不到它......
【问题讨论】:
据我了解,NaN 表示任何不是数字的东西,而掩码数组标记缺失值或数字但对您的数据集无效的值。
希望对你有帮助。
【讨论】:
区别在于两个结构所保存的数据。
使用regular array with np.nan,无效值后面没有数据。
使用masked array,您可以初始化一个完整的数组,然后在其上应用掩码,使某些值显得无效。 numpy.ma 模块提供了一些方法,因此您不必处理 np.nan 行为(例如,np.nan == np.nan 始终是 False 等)
如果您有一个永远不需要将值放置在无效单元格中的数组,请使用前者。您始终可以使用np.nan 和一些索引技术来复制复杂的操作,但这就是掩码数组的用途。
【讨论】:
请记住,jrmyp 提到的奇怪的 np.nan 行为包括意外结果,例如在使用 statsmodels(例如 ttest)或 numpy 模块(例如平均值)的函数时。根据经验,大多数这些函数都有 NaN 的变通方法,但它有可能让你发疯一段时间。这似乎是尽可能屏蔽数组的理由。
【讨论】: