我有dtype = uint8的3-D蒙版数组,我想做arr.max(axis=-1)
之类的事情,但不是总是选择最大值,我想要(1)找到第一个(或最后一个)未命中element,(2)选择随机任意未遮罩元素或(3)沿轴选择中位数或模式,如numpy.ma.median
或scipy.stats.mstats.mode
方法(3)是理想世界中我想要的,但它非常慢。我然后尝试找到max,它运行得很快。但我不想总是使用最大值。
答案 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倍,具体取决于屏蔽元素的分数...... :-)