Das Problem ist, weil der Vergleich a == a.min(axis=1)
wird jede Spalte auf den Minimalwert jeder Zeile zu vergleichen, anstatt jede Zeile zu den Minimalwerten zu vergleichen. Dies liegt daran, dass a.min(axis=1)
einen Vektor anstelle einer Matrix zurückgibt, die sich ähnlich wie ein Nx1
Array verhält. Daher führt der Operator ==
beim Senden die Operation in einer spaltenweisen Weise aus, um den Dimensionen zu entsprechen.
a == a.min(axis=1)
# array([[ True, False, False],
# [False, False, False],
# [False, False, True]], dtype=bool)
Eine mögliche Art und Weise, dies zu beheben, ist auf das Ergebnis resize
a.min(axis=1)
in Spaltenvektor (beispielsweise eine 3 x 1 2D-Array).
a == np.resize(a.min(axis=1), [a.shape[0],1])
# array([[ True, False, False],
# [ True, False, False],
# [False, False, True]], dtype=bool)
Oder einfacher als @ColonelBeuvel gezeigt hat:
a == a.min(axis=1)[:,None]
Anwendung dieser
nun auf Ihre gesamte Zeile Code.
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)
Danke für die Erklärung! Es funktioniert jetzt, dank @Colonel Beauvel sowie –
Ich habe eine zusätzliche Frage tatsächlich. Was ist, wenn ich eine Zeile mit zwei oder drei gleichen Elementen habe, zum Beispiel: a = Array ([[7, 5, 5], [3, 6, 9], [5, 1, 1]]) Wie kann ich nur einen der Mindestwerte maskieren und nicht alle? –
Kannst du mir auch helfen? @ ColonelBeuvel –