我有一個2D屏蔽的值數組,我需要從最低到最高排序。例如:NumPy:從閾值以上和以下的屏蔽二維數組中查找排序的索引
import numpy as np
# Make a random masked array
>>> ar = np.ma.array(np.round(np.random.normal(50, 10, 20), 1),
mask=np.random.binomial(1, .2, 20)).reshape((4,5))
>>> print(ar)
[[-- 51.9 38.3 46.8 43.3]
[52.3 65.0 51.2 46.5 --]
[56.7 51.1 -- 38.6 33.5]
[45.2 56.8 74.1 58.4 56.4]]
# Sort the array from lowest to highest, with a flattened index
>>> sorted_ind = ar.argsort(axis=None)
>>> print(sorted_ind)
[14 2 13 4 15 8 3 11 7 1 5 19 10 16 18 6 17 0 12 9]
但隨着分類指數方面,我需要把它們分爲兩個簡單的子集:比小於或等於比大於或等於一個給定的數據。此外,我不需要蒙版值,他們需要被刪除。例如,對於datum = 51.1
,如何將sorted_ind
過濾到datum
以上的10個索引以及8個以下的值? (注意:由於或等於邏輯標準,有一個共享索引,可以從分析中刪除3個掩碼值)。我需要保留扁平的索引位置,因爲稍後我會使用np.unravel_index(ind, ar.shape)
。
這也可以用numpy的'where'函數來優雅地實現 – wim
@wim:我正在試着用'where'的技巧,但是我無法理解輸出。雖然不太「Numpythonic」,但「過濾器」技術看起來工作得很好。 –