numpy:NaN 和掩码数组之间的区别

numpy: difference between NaN and masked array

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

我想我的问题是我是否/什么时候应该使用一个而不是另一个? np.NaNregular 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 模块(例如 average)的函数时。根据经验,这些函数中的大多数都有针对 NaN 的变通方法,但它有可能让您暂时发疯。这似乎是尽可能屏蔽数组的原因。