numpy:NaN和蒙面数组之间的差异

时间:2015-05-29 11:49:05

标签: python numpy nan

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

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

我确信答案必须在那里,但我找不到......

3 个答案:

答案 0 :(得分:8)

差异在于两个结构所持有的数据。

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

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

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

答案 1 :(得分:2)

根据我的理解,NaN代表任何不是数字的东西,而蒙面数组则标记缺失值或值,这些值是数字但对数据集无效。

我希望有所帮助。

答案 2 :(得分:1)

请记住,jrmyp提到的奇怪的np.nan行为包括意外的结果,例如,当使用statsmodels函数(例如ttest)或numpy模块(例如average)时。根据经验,大多数这些功能都可以解决NaN,但有可能使您发疯一段时间。这似乎是尽可能屏蔽数组的原因。