Obtenir l'index de ligne pour un 2D tableau numPy lorsque plusieurs valeurs de la colonne sont connus
Supposons que j'ai un 2D tableau numPy tels que:
un = [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ]
Comment puis-je trouver l'index de la ligne pour laquelle je sais que plusieurs valeurs? Par exemple, si il est connu que les 0e colonne 2 et la 1ère colonne est de 5, je voudrais savoir l'index de ligne où cette condition est remplie (ligne 1 dans ce cas).
Dans mon application, les deux premières colonnes sont (x,y) les coordonnées, et la troisième colonne de l'information sur les coordonnées. Je suis en train d'essayer de trouver notamment des coordonnées dans la liste afin que je puisse modifier la valeur dans la troisième colonne.
EDIT: Pour préciser, ici, c'est un non-square exemple:
un = [ [1, 2, 3, 4, 5, 6], [7, 8, 9, 10, 11, 12], [13, 14, 15, 16, 17, 18] ]
Supposons que je sais de la ligne, je suis à la recherche pour a 13 dans le 0e colonne, et 14 dans la 1ère colonne. J'aimerais revenir à l'index de la ligne. Dans ce cas, j'aimerais revenir à l'index 2 (2ème rangée).
Ou, mieux encore, je voudrais modifier la 4ème colonne de la ligne 13 dans le 0e colonne et 14 dans la 1ère colonne. Voici une solution que j'ai trouvée pour le cas que j'ai décrit (modification de la valeur à 999):
a[(a[:,0]==13) & a[:,1]==14),
3] = 999
donne:
un = [ [1, 2, 3, 4, 5, 6], [7, 8, 9,
10, 11, 12], [13, 14, 15, 999, 17, 18] ]
Je suis désolé si ce n'était pas clair. Quelqu'un pourrait-il le souligne dans mon post original (au-dessus de la modifier) comment cela pourrait être interprété différemment, parce que j'ai du mal à le voir.
Grâce.
EDIT 2: correction d'une erreur dans la première édition (en gras)
Je peux maintenant voir comment j'ai fait cette chose entière source de confusion pour tout le monde. La solution à mon problème est bien décrite dans la condition b) de manger est la solution. Merci.
sum(a[0]== 13)
? MerciMalheureusement, j'ai foiré lors de l'édition de mon post la première fois, que j'ai modifié. Je vous remercie pour votre patience.
content d'ici que vous avez été en mesure de résoudre votre problème. Si vous vous sentez que ma réponse a été précieux pour vous, vous pouvez envisager de upvote ;-). Merci
Je ne peux pas upvote jusqu'à ce que j'ai 15 réputation, mais je n'ai marquer mon accepté de répondre. Merci.
mais vous semblez être assez près de 15 déjà ;-). Merci
OriginalL'auteur lookitsmarc | 2011-02-06
Vous devez vous connecter pour publier un commentaire.
Ici sont des moyens pour traiter des conditions sur des colonnes ou des lignes, inspiré par le Zen de Python.
Donc, à la suite du deuxième conseil:
a) les conditions sur la colonne(s), appliquée à la ligne(s):
b) les conditions sur la ligne(s), appliquée à la colonne(s):
J'espère donc que ce qui fait vraiment de sens à toujours être explicite lors de l'accès à des colonnes et des lignes. Le Code est généralement lu par des personnes de divers horizons.
OriginalL'auteur eat
a==2
retourne un booléen tableau numpy, de montrer où la condition est Vraie:Vous pouvez trouver toutes les colonnes où cela est Vrai en utilisant
np.any(...,axis=0)
:Vous pouvez trouver l'endroit où les deux conditions sont simultanément vraies en utilisant
&
:Enfin, vous pouvez trouver l'indice des colonnes où les conditions sont simultanément Vraies à l'aide de
np.where
:OriginalL'auteur unutbu
Faire
comme unutbu suggéré de ne pas utiliser les informations que le 2 est dans la 0e colonne, et 5 est dans la 1ère. Donc, pour
a = np.array([[5, 2, 3], [2, 5, 6], [7, 8, 9]])
, il aura tort de retour(array([0, 1]),)
Au lieu de cela, vous pouvez utiliser
pour obtenir le résultat correct
(array([1]),)
.En outre, si vous souhaitez modifier la 2e colonne de cette ligne particulière, vous pouvez sauter le
np.where
et juste référence:a[2][(a[0]==2) & (a[1]==5)]
. Cela fonctionne aussi pour les affectations, par exemplea[2][(a[0]==2) & (a[1]==5)] = 11
.basé sur votre commentaire J0ker5, je vais vous demander de calriify votre question. Pourriez-vous donner un exemple de carrés
a
, capable de réaliser vos exigences? À mon humble avis votre question en quelque sorte les mélanges de lignes et colonnes les unes avec les autres. MerciJ'ai édité mon post original avec un peu plus de précisions. J'espère que c'est suffisant.
OriginalL'auteur tsvikas