0

我有 dtype=uint8 的 3-D 掩码数组,我想做类似的事情arr.max(axis=-1),但不是总是选择最大值,我想(1)找到第一个(或最后一个)未组合的元素,(2)选择随机任意未屏蔽元素或 (3) 沿轴选择中值或众数,例如numpy.ma.medianscipy.stats.mstats.mode

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

4

1 回答 1

0

我不确定我是否正确理解了您的问题,但如果计算速度是一个问题ma.median,您可以考虑仅在数组的未屏蔽部分使用相应的“正常”numpy 函数:

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 倍,具体取决于屏蔽元素的比例...... :-)

于 2012-12-05T18:58:50.007 回答