Diciamo ho un matrice quadrata come ingresso:pitone - NumPy - eliminando più righe e colonne da una matrice
array([[0, 1, 1, 0],
[1, 1, 1, 1],
[1, 1, 1, 1],
[0, 1, 1, 0]])
voglio contare i nonzeros nella matrice dopo rimozione delle righe 2 e 3 e colonne 2 e 3. Successivamente voglio fare lo stesso per le righe 3 e 4 e colonne 3 e 4. Quindi l'uscita dovrebbe essere:
0 # when removing rows/cols 2 and 3
3 # when removing rows/cols 3 and 4
Ecco la soluzione ingenua utilizzando np.delete
:
import numpy as np
a = np.array([[0,1,1,0],[1,1,1,1],[1,1,1,1],[0,1,1,0]])
np.count_nonzero(np.delete(np.delete(a, (1,2), axis=0), (1,2), axis=1))
np.count_nonzero(np.delete(np.delete(a, (2,3), axis=0), (2,3), axis=1))
Ma np.delete
restituisce un nuovo array. Esiste un metodo più veloce, che comporta l'eliminazione di righe e colonne contemporaneamente? Si può usare il mascheramento? La documentation su np.delete
legge:
Spesso è preferibile utilizzare una maschera booleano.
Come faccio a farlo? Grazie.
Quando si dà questo tipo di domande, è importante per spiegare le dimensioni di ciascuna variabile (ad esempio dimensioni della matrice. , numero di righe cancellate, ecc.) perché la qualità di molte risposte dipende da questo. – Veedrac
@Veedrac Grazie! Lo so. Cercherò di non dimenticare in futuro. In questo caso il numero di righe nella matrice quadrata non è mai stato superiore a 10. –