2012-10-18 35 views
0

我有3D模型的dtype = uint8數組,我想做一些類似於arr.max(axis=-1)的事情,但不是總是選擇最大值,我想要(1)先找到或最後一個)unmased元素,(2)挑隨機任意東窗事發元素或(3)挑中位數或衆沿軸,像numpy.ma.medianscipy.stats.mstats.mode從numpy蒙面數組中挑選任意的unmasked元素

的方法(3)是什麼,我想在理想的世界,但它是極其緩慢。然後,我試圖找到最快,運行速度很快。但我不想總是使用最大值。

回答

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倍,具體取決於被屏蔽元素的分數......: - )