从numpy蒙面数组中选择任意未屏蔽的元素

时间:2012-10-18 06:30:59

标签: numpy python-2.7

我有dtype = uint8的3-D蒙版数组,我想做arr.max(axis=-1)之类的事情,但不是总是选择最大值,我想要(1)找到第一个(或最后一个)未命中element,(2)选择随机任意未遮罩元素或(3)沿轴选择中位数或模式,如numpy.ma.medianscipy.stats.mstats.mode

方法(3)是理想世界中我想要的,但它非常慢。我然后尝试找到max,它运行得很快。但我不想总是使用最大值。

1 个答案:

答案 0 :(得分:0)

我不确定我是否正确理解了您的问题,但如果计算速度是ma.median的问题,您可以考虑在数组的未屏蔽部分使用相应的'normal'numpy函数:< / p>

arr = ma.array(some_array)
med = ma.median(arr)                # masked array solution
med = np.median(arr.compressed())   # 'normal' function on unmasked part of arr  

除了压缩部分,这不应该比正常情况慢。

更新我刚检查了两种方法的速度:使用压缩数组的“正常”函数是屏蔽数组解决方案的5-15倍,具体取决于屏蔽元素的分数...... :-)