Ein Python list
hat eine remove
Methode.
Mit einer Nutzenfunktion wir die MIN- und MAX-Elemente aus einer Reihe entfernen konnten:
def foo(i,j,k):
il = i.tolist()
il.remove(j)
il.remove(k)
return il
In [230]: [foo(i,j,k) for i,j,k in zip(a,b,c)]
Out[230]: [[4, 5], [2, 5], [3, 9]]
Dieser zurück in ein Array mit np.array(...)
gedreht werden kann. Beachten Sie, dass dies nur einen der 9
in der letzten Zeile entfernt. Wenn beide entfernt worden wären, hätte die letzte Liste nur einen Wert, und das Ergebnis konnte nicht in ein 2D-Array zurückverwandelt werden.
Ich bin sicher, dass wir mit einem reinen-Array-Verfahren kommen könnten, möglicherweise argmax
und argmin
statt max
und min
useing. Aber ich denke, dass der Listenansatz ein besserer Ausgangspunkt für einen Python-Anfänger ist.
Ein Array Maskieren Ansatz
In [232]: bi = np.argmax(a,1)
In [233]: ci = np.argmin(a,1)
In [234]: bi
Out[234]: array([3, 1, 1], dtype=int32)
In [235]: ci
Out[235]: array([0, 3, 3], dtype=int32)
In [243]: mask = np.ones_like(a, bool)
In [244]: mask[np.arange(3),bi]=False
In [245]: mask[np.arange(3),ci]=False
In [246]: mask
Out[246]:
array([[False, True, True, False],
[ True, False, True, False],
[ True, False, True, False]], dtype=bool)
In [247]: a[mask]
Out[247]: array([4, 5, 2, 5, 3, 9])
In [248]: _.reshape(3,-1)
Out[248]:
array([[4, 5],
[2, 5],
[3, 9]])
Auch das ist besser, wenn wir nur aus jeder Zeile eine max und eine Minute löschen.
Ein anderer Maskierungs Ansatz:
In [257]: (a!=b[:,None]) & (a!=c[:,None])
Out[257]:
array([[False, True, True, False],
[ True, False, True, False],
[ True, False, False, False]], dtype=bool)
In [258]: a[(a!=b[:,None]) & (a!=c[:,None])]
Out[258]: array([4, 5, 2, 5, 3])
Dies all ‚9s in der letzten Zeile nicht entfernt. Aber es behält die Zeilenaufteilung nicht bei.
Dies bewahrt die Zeilenstruktur und ermöglicht variable Längen:
In [259]: mask=(a!=b[:,None]) & (a!=c[:,None])
In [260]: [i[j] for i,j in zip(a, mask)]
Out[260]: [array([4, 5]), array([2, 5]), array([3])]
@hpaulj ich ein Python-Anfänger bin und so hatte ich keine Ahnung, wie die Maximalwerte zu löschen. – user
Hat eine der veröffentlichten Lösungen für Sie funktioniert? Wenn ja, in Betracht ziehen, einen von denen zu akzeptieren? – Divakar
Entschuldigung! Ich war mit dieser Website nicht vertraut. Und ja, ich habe die beste Antwort akzeptiert. Vielen Dank. – user