web-dev-qa-db-fra.com

Numpy supprime une dimension du tableau np

J'ai quelques images avec lesquelles je veux travailler. Le problème, c'est qu'il y a deux types d'images: 106 x 106 pixels, certaines en couleur et certaines en noir et blanc. 

une avec seulement deux (2) dimensions:

(106.106)

et une avec trois (3)

(106,106,3)

Est-il possible de dépouiller cette dernière dimension?

J'ai essayé np.delete, mais cela n'a pas semblé fonctionner.

np.shape(np.delete(Xtrain[0], [2] , 2))
Out[67]: (106, 106, 2)
16
Kevin

Vous pouvez utiliser l'indexation sophistiquée de numpy (une extension de la notation par tranche intégrée de Python):

x = np.zeros( (106, 106, 3) )
result = x[:, :, 0]
print(result.shape)

empreintes

(106, 106)

Une forme de (106, 106, 3) signifie que vous avez 3 ensembles de choses qui ont une forme (106, 106). Donc, pour "décaper" la dernière dimension, il vous suffit de choisir l'une d'entre elles (c'est ce que fait l'indexation de fantaisie).

Vous pouvez garder n'importe quelle tranche que vous voulez. J'ai choisi arbitrairement de garder le 0e, puisque vous n'avez pas précisé ce que vous vouliez. Ainsi, result = x[:, :, 1] et result = x[:, :, 2] donneront également la forme souhaitée: tout dépend de la tranche à conserver. 

34
Matt Messersmith

Il suffit de prendre la valeur moyenne sur la dimension couleurs (axis=2):

Xtrain_monochrome = Xtrain.mean(axis=2)
1
Dmitry Mottl

Lorsque la forme de votre tableau est (106, 106, 3), vous pouvez la visualiser sous forme de tableau avec 106 lignes et 106 colonnes rempli de points de données où chaque point est array of 3 numbers que nous pouvons représenter par [x, y ,z]. Par conséquent, si vous souhaitez obtenir les dimensions (106, 106), vous devez créer des points de données dans votre tableau qui ne soient pas des tableaux mais des nombres simples. Vous pouvez y parvenir en extrayant soit le composant x, le composant y ou le composant z de chaque point de données, soit en appliquant une fonction qui agrège les trois composants comme le mean, sum, max etc. Vous pouvez extraire n'importe quel composant comme @matt Messersmith suggéré ci-dessus.

0
Nde Samuel Mbah