簡體   English   中英

屏蔽矩陣行中的最小值

[英]Mask minimum values in matrix rows

我有這個 3x3 矩陣:

a=array([[ 1, 11,  5],
   [ 3,  9,  9],
   [ 5,  7, -3]])

我需要屏蔽每行中的最小值,以便計算每行丟棄最小值的平均值。 有沒有通用的解決方案? 我試過

a_masked=np.ma.masked_where(a==np.ma.min(a,axis=1),a)

哪個屏蔽了第一行和第三行的最小值,而不是第二行?

我將不勝感激任何幫助。 謝謝!

問題是因為比較a == a.min(axis=1)是將每一與每一行的最小值進行比較,而不是將每一行與最小值進行比較。 這是因為a.min(axis=1)返回一個向量而不是一個矩陣,其行為類似於Nx1數組。 因此,在廣播時, ==運算符以列方式執行操作以匹配維度。

a == a.min(axis=1)

# array([[ True, False, False],
#        [False, False, False],
#        [False, False,  True]], dtype=bool)

解決此問題的一種潛在方法是將a.min(axis=1)的結果resize為列向量(例如 3 x 1 2D 數組)。

a == np.resize(a.min(axis=1), [a.shape[0],1])

# array([[ True, False, False],
#        [ True, False, False],
#        [False, False,  True]], dtype=bool)

或者更簡單地如@ColonelBeuvel 所示:

a == a.min(axis=1)[:,None]

現在將其應用於您的整行代碼。

a_masked = np.ma.masked_where(a == np.resize(a.min(axis=1),[a.shape[0],1]), a)

# masked_array(data =
#   [[-- 11 5]
#   [-- 9 9]
#   [5 7 --]],
#        mask =
#           [[ True False False]
#            [ True False False]
#            [False False  True]],
#           fill_value = 999999)

min() 函數有什么用?

對於每一行,只需執行 min(row) ,它就會在您的案例中為您提供此列表中的最小值一行。 只需將此最小值附加到所有最小值的列表中。

最小列表=[]

for i in array: minList.append(min(i))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM