Y at-il une fonction « boîte englobante » (tranche avec des valeurs non nulles) pour un ndarray à NumPy?

StackOverflow https://stackoverflow.com/questions/4808221

Question

Je traite avec des tableaux créés par numpy.array (), et je dois dessiner des points sur une toile simulant une image. Comme il y a beaucoup de valeurs nulles autour de la partie centrale du tableau qui contient les données significatives, je voudrais « couper » le tableau, l'effacement des colonnes qui ne contiennent que des zéros et des lignes qui ne contiennent que des zéros.

Alors, je voudrais savoir d'une fonction de numpy native ou même un extrait de code à « couper » ou trouver une « boîte englobante » à tranche uniquement les données contenant une partie du tableau.

(car il est une question conceptuelle, je ne l'ai pas tout le code, désolé si je dois, je suis très frais à l'affichage à SO.)

Merci pour la lecture

Autres conseils

Cela devrait le faire:

from numpy import array, argwhere

A = array([[0, 0, 0, 0, 0, 0, 0],
           [0, 0, 0, 0, 0, 0, 0],
           [0, 0, 1, 0, 0, 0, 0],
           [0, 0, 1, 1, 0, 0, 0],
           [0, 0, 0, 0, 1, 0, 0],
           [0, 0, 0, 0, 0, 0, 0],
           [0, 0, 0, 0, 0, 0, 0]])

B = argwhere(A)
(ystart, xstart), (ystop, xstop) = B.min(0), B.max(0) + 1 
Atrim = A[ystart:ystop, xstart:xstop]

Quelque chose comme:

empty_cols = sp.all(array == 0, axis=0)
empty_rows = sp.all(array == 0, axis=1)

Les tableaux résultants seront 1D tableaux booléens. Boucle sur les deux extrémités de trouver la « boîte englobante ».

scroll top