numpy有两种标记缺失值的方法:我可以使用NaN
或masked array
。我知道使用NaN(可能)更快,而屏蔽数组提供更多功能(哪个?)。
我想我的问题是我应该/何时使用一个而不是另一个?
np.NaN
中regular array vs. a masked array
的用例是什么?
我确信答案必须在那里,但我找不到......
答案 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,但有可能使您发疯一段时间。这似乎是尽可能屏蔽数组的原因。