我有 dtype=uint8 的 3-D 掩码数组,我想做类似的事情arr.max(axis=-1)
,但不是总是选择最大值,我想(1)找到第一个(或最后一个)未组合的元素,(2)选择随机任意未屏蔽元素或 (3) 沿轴选择中值或众数,例如numpy.ma.median
或 scipy.stats.mstats.mode
方法(3)是我在理想世界中想要的,但它非常慢。然后我尝试找到运行速度很快的 max。但我不想总是使用最大值。
我有 dtype=uint8 的 3-D 掩码数组,我想做类似的事情arr.max(axis=-1)
,但不是总是选择最大值,我想(1)找到第一个(或最后一个)未组合的元素,(2)选择随机任意未屏蔽元素或 (3) 沿轴选择中值或众数,例如numpy.ma.median
或 scipy.stats.mstats.mode
方法(3)是我在理想世界中想要的,但它非常慢。然后我尝试找到运行速度很快的 max。但我不想总是使用最大值。
我不确定我是否正确理解了您的问题,但如果计算速度是一个问题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 倍,具体取决于屏蔽元素的比例...... :-)