Ho un array che potrebbe essere il seguente:eliminazione righe nella matrice NumPy
ANOVAInputMatrixValuesArray = [[ 0.96488889, 0.73641667, 0.67521429, 0.592875,
0.53172222], [ 0.78008333, 0.5938125, 0.481, 0.39883333, 0.]]
noti che una delle righe ha un valore zero al termine. Voglio eliminare qualsiasi riga che contiene uno zero, mantenendo qualsiasi riga che contenga valori diversi da zero in tutte le celle.
Ma la matrice avrà un numero diverso di righe ogni volta che viene popolata e gli zeri saranno posizionati in righe diverse ogni volta.
ottengo il numero di elementi diversi da zero in ciascuna riga con la seguente riga di codice:
NumNonzeroElementsInRows = (ANOVAInputMatrixValuesArray != 0).sum(1)
Per la matrice sopra, NumNonzeroElementsInRows
contiene: [5 4]
I cinque indica che tutti i valori possibili nella riga 0 sono diversi da zero, mentre i quattro indicano che uno dei possibili valori nella riga 1 è uno zero.
Pertanto, sto cercando di utilizzare le seguenti righe di codice per trovare ed eliminare righe contenenti valori zero.
for q in range(len(NumNonzeroElementsInRows)):
if NumNonzeroElementsInRows[q] < NumNonzeroElementsInRows.max():
p.delete(ANOVAInputMatrixValuesArray, q, axis=0)
Ma per qualche ragione, questo codice non sembra di fare nulla, anche se facendo un sacco di comandi di stampa indica che tutte le variabili sembrano essere popolando correttamente che porta al codice.
Ci deve essere un modo semplice per "cancellare qualsiasi riga che contenga un valore zero".
Qualcuno può mostrarmi quale codice scrivere per realizzare questo?
un po 'più semplice: p [~ (p == 0) .any (1)] o più esplicito per le righe: p [~ (p == 0) .any (1),:] – user333700
@ user333700 - Questa dovrebbe essere una risposta - avrai sicuramente il mio voto! 'any' è molto più chiaro di' sum' in questo uso. – mtrw