Ich habe ein Array, das so aussehen könnte:
ANOVAInputMatrixValuesArray = [[ 0.96488889, 0.73641667, 0.67521429, 0.592875,
0.53172222], [ 0.78008333, 0.5938125, 0.481, 0.39883333, 0.]]
Beachten Sie, dass eine der Zeilen am Ende einen Wert von Null hat. Ich möchte jede Zeile löschen, die eine Null enthält, während jede Zeile, die Werte ungleich Null enthält, in allen Zellen beibehalten wird.
Das Array hat jedoch jedes Mal, wenn es gefüllt wird, eine unterschiedliche Anzahl von Zeilen, und die Nullen befinden sich jedes Mal in unterschiedlichen Zeilen.
Ich erhalte die Anzahl der Nicht-Null-Elemente in jeder Zeile mit der folgenden Codezeile:
NumNonzeroElementsInRows = (ANOVAInputMatrixValuesArray != 0).sum(1)
NumNonzeroElementsInRows
Enthält für das obige Array : [5 4]
Die fünf geben an, dass alle möglichen Werte in Zeile 0 ungleich Null sind, während die vier angeben, dass einer der möglichen Werte in Zeile 1 eine Null ist.
Daher versuche ich, die folgenden Codezeilen zu verwenden, um Zeilen zu finden und zu löschen, die Nullwerte enthalten.
for q in range(len(NumNonzeroElementsInRows)):
if NumNonzeroElementsInRows[q] < NumNonzeroElementsInRows.max():
p.delete(ANOVAInputMatrixValuesArray, q, axis=0)
Aus irgendeinem Grund scheint dieser Code nichts zu tun, obwohl viele Druckbefehle darauf hinweisen, dass alle Variablen im Vorfeld des Codes korrekt ausgefüllt zu sein scheinen.
Es muss eine einfache Möglichkeit geben, einfach "jede Zeile zu löschen, die einen Nullwert enthält".
Kann mir jemand zeigen, welchen Code ich schreiben muss, um dies zu erreichen?
quelle
numpy.delete(x, index)
nicht funktionierte.Hier ist ein Einzeiler (ja, er ähnelt dem von user333700, ist jedoch etwas unkomplizierter):
Diese Methode ist übrigens viel, viel schneller als die maskierte Array-Methode für große Matrizen. Bei einer Matrix mit 2048 x 5 ist diese Methode etwa 1000x schneller.
Übrigens war die Methode von user333700 (aus seinem Kommentar) in meinen Tests etwas schneller, obwohl es mich verwirrt, warum.
quelle
any
Kurzschlüsse auf wahr beim ersten festgestellten wahren Fall;all
Kurzschlüsse nach falsch beim ersten erkannten falschen Fall. In diesem Fall sollte der Kurzschluss ein Unentschieden sein, aber das Extra sollte es meiner Meinung nach nicht langsamer machen.Dies ähnelt Ihrem ursprünglichen Ansatz und benötigt weniger Speicherplatz als die Antwort von unutbu , aber ich vermute, dass er langsamer sein wird.
Übrigens
p.delete()
funktioniert Ihre Leitung bei mir nicht -ndarray
sie hat kein.delete
Attribut.quelle
numpy bietet eine einfache Funktion, um genau dasselbe zu tun: Angenommen, Sie haben ein maskiertes Array 'a'. Wenn Sie numpy.ma.compress_rows (a) aufrufen, werden die Zeilen gelöscht, die einen maskierten Wert enthalten. Ich denke, das geht auf diese Weise viel schneller ...
quelle
quelle
Ich könnte zu spät sein, um diese Frage zu beantworten, wollte aber meine Beiträge zum Nutzen der Community teilen. Lassen Sie mich in diesem Beispiel Ihre Matrix 'ANOVA' nennen, und ich gehe davon aus, dass Sie nur versuchen, Zeilen mit Nullen nur in der 5. Spalte aus dieser Matrix zu entfernen.
quelle