Comment masquer une numpy tableau 2D?
Dire que j'ai un tableau à deux dimensions de coordonnées qui ressemble à quelque chose comme
x = array([[1,2],[2,3],[3,4]])
Précédemment dans mon travail jusqu'à présent, j'ai généré un masque qui finit par ressembler à
mask = [False,False,True]
Lorsque j'essaie d'utiliser ce masque sur le 2D coordonner vecteur, j'obtiens une erreur
newX = np.ma.compressed(np.ma.masked_array(x,mask))
>>>numpy.ma.core.MaskError: Mask and data not compatible: data size
is 6, mask size is 3.`
qui fait sens, je suppose. J'ai donc essayé d'utiliser simplement le masque suivant à la place:
mask2 = np.column_stack((mask,mask))
newX = np.ma.compressed(np.ma.masked_array(x,mask2))
Et ce que je reçois est proche:
>>>array([1,2,2,3])
à ce que je m'attends (et l'envie):
>>>array([[1,2],[2,3]])
Il doit y avoir un moyen plus facile de faire cela?
OriginalL'auteur Anonymous | 2016-07-05
Vous devez vous connecter pour publier un commentaire.
Est-ce ce que vous recherchez?
Ou de numpy masqué tableau:
np.ma.compressed()
fait les deux.Je ne suis pas trop sur masqués tableau, probablement le même niveau que vous. Juste essayer de le faire fonctionner. Eh bien, si vous essayez de supprimer des éléments, je pense que la logique de l'index n'est pas une mauvaise façon.
OriginalL'auteur Psidom
Votre
x
est 3x2:Faire un 3-élément booléen masque:
Qui peut être utilisé pour sélectionner les lignes où il est Vrai, ou si elle est Fausse. Dans les deux cas, le résultat est 2d:
C'est sans l'aide de la MaskedArray sous-classe. Pour faire un tel tableau, nous avons besoin d'un masque qui correspond à
x
en forme. Il n'y a pas de disposition pour le masquage qu'une dimension.L'application de
compressed
à qui produit un raveled tableau:array([1, 2, 2, 3])
Depuis le masquage est l'élément par élément, il pourrait masquer un élément dans la ligne 1, 2 de la rangée 2, etc. Donc, en général,
compressing
, en supprimant les éléments masqués, ne cède pas d'un tableau 2d. La forme aplatie est le seul général choix.np.ma
a plus de sens quand il y a une diffusion de la masqués valeurs. Il n'est pas d'une grande utilité si vous voulez sélectionner ou désélectionner l'ensemble des lignes ou des colonnes.===============
Ici sont plus typique masqué tableaux:
OriginalL'auteur hpaulj
Depuis aucune de ces solutions n'a fonctionné pour moi, j'ai pensé à écrire ce qu'une solution n'a, peut-être qu'il sera utile pour quelqu'un d'autre. J'utilise python 3.x et j'ai travaillé sur les deux tableaux 3D. L'une, que j'appelle
data_3D
contient les valeurs flottantes des enregistrements dans un scanner du cerveau, et de l'autre,template_3D
contenant des entiers qui représentent les régions du cerveau. Je voulais choisir les valeurs dedata_3D
correspondant à un nombre entierregion_code
comme partemplate_3D
:ce qui me donne un tableau 1D de seulement pertinents enregistrements.
OriginalL'auteur CrossEntropy
Dans votre dernier exemple, le problème n'est pas le masque. Il est de votre utilisation de
compressed
. À partir de la docstring decompressed
:Donc
compressed
aplatit le nonmasked valeurs dans un 1-d de la matrice. (Il le doit, car il n'y a aucune garantie que les données compressées aura un n-dimensions de la structure.)Prendre un coup d'oeil à la masqués tableau avant de le compresser:
Si je comprends ce que vous essayez de faire, @Psidom première suggestion semble raisonnable. En particulier, vous n'avez probablement pas besoin d'un masqués tableau. Indexer un tableau normal avec un booléen tableau.
OriginalL'auteur Warren Weckesser