如何在Numpy中创建具有掩码值的数组的直方图?

Eri*_*got 15 python arrays numpy histogram

在Numpy 1.4.1中,计算掩码数组直方图的最简单或最有效的方法是什么? numpy.histogrampyplot.hist默认计算蒙面元素!

我现在能想到的唯一简单解决方案是使用非屏蔽值创建一个新数组:

histogram(m_arr[~m_arr.mask])
Run Code Online (Sandbox Code Playgroud)

但是,这不是很有效,因为这会不必要地创建一个新数组.我很乐意阅读更好的想法!

Joe*_*ton 14

(根据上面的讨论取消删除...)

我不确定numpy开发人员是否会认为这是一个错误或预期的行为.我在邮件列表上问过,所以我想我们会看到他们说的话.

无论哪种方式,这都是一个简单的解决方案.修补numpy/lib/function_base.py使用numpy.asanyarray而不是numpy.asarray对函数的输入将允许它正确使用掩码数组(或ndarray的任何其他子类)而无需创建副本.

编辑:似乎是预期的行为. 如下所述:

如果你想忽略屏蔽数据,它只是在额外的函数调用上

直方图(m_arr.compressed())

我不认为这会产生额外的副本这一事实将是相关的,因为我认为直方图内的完全掩码数组处理将会更加昂贵.

使用asanyarray还可以允许直方图计算中可能无法正确处理的矩阵和其他子类型.

除了删除掩盖的观察之外的任何其他事情,有必要弄清楚直方图的掩蔽数组定义是什么,正如Bruce指出的那样.


til*_*ten 9

试试hist(m_arr.compressed()).


小智 5

这是一个非常老的问题,但是这些天我只使用:

numpy.histogram(m_arr, bins=.., range=.., density=False, weights=m_arr_mask)

其中m_arr_mask是具有与m_arr相同形状的数组,由要从直方图中排除的m_arr元素的0值和要包含的元素的1值组成。