比較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)
一つの潜在的な方法は、列ベクトル(例えば、3×1次元配列)にresize
にa.min(axis=1)
の結果です。
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)
説明をありがとう! @Colonel Beauvelのおかげで、今でも動作します –
私は実際には別の質問があります。 a = array([[7、5、5]、 [3,6,9]、 [5,1,1]])同じ要素の2つまたは3つの行がある場合はどうなりますか? どのように最小値のいずれかをマスクするだけで、すべてをマスクすることはできませんか? –
私もお手伝いできますか? @ColonelBeuvel –