从numpy掩码数组中拾取任意未掩码元素
我有一个dtype=uint8的三维屏蔽数组,我想做一些类似于从numpy掩码数组中拾取任意未掩码元素,numpy,python-2.7,Numpy,Python 2.7,我有一个dtype=uint8的三维屏蔽数组,我想做一些类似于arr.max(axis=-1),但不是总是选择max,我想(1)找到第一个(或最后一个)未屏蔽元素,(2)随机选择任意未屏蔽元素或(3)沿轴选择中值或模式,如numpy.ma.median或scipy.stats.mstats.mode 这种方法(3)是我在理想世界中想要的,但它非常缓慢。然后我试着找到max,它跑得很快。但我不想总是使用max值。 < p>我不确定是否正确地理解了你的问题,但是如果计算速度与代码> mA.中位数有关
arr.max(axis=-1)
,但不是总是选择max,我想(1)找到第一个(或最后一个)未屏蔽元素,(2)随机选择任意未屏蔽元素或(3)沿轴选择中值或模式,如numpy.ma.median
或scipy.stats.mstats.mode
这种方法(3)是我在理想世界中想要的,但它非常缓慢。然后我试着找到max,它跑得很快。但我不想总是使用max值。 < p>我不确定是否正确地理解了你的问题,但是如果计算速度与<>代码> mA.中位数有关,你可以考虑在数组的未屏蔽部分使用相应的“正常”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倍,这取决于屏蔽元素的分数…:-)