-1
votes

Impossible d'affecter une matrice numpy

Je veux carré même des valeurs d'index dans une matrice numpie et assignez la même chose dans ce tableau. J'ai suivi 2 approches.

1 - p> xxx pré>

qui fonctionne. P>

2 - p>

arr[i] = arr[i]**2 for i in range(len(arr)) if i % 2 == 0

 File "<ipython-input-149-30fc7ed25f1f>", line 1
    arr[i] = arr[i]**2 for i in range(len(arr)) if i % 2 == 0
                     ^
SyntaxError: invalid syntax


1 commentaires

Ne boucle pas sur un tableau NUMPY, vous perdez la puissance du code optimisé. Utilisez plutôt NP.where - voir ma réponse ci-dessous.


3 Réponses :


0
votes

Je suppose que vous essayez de faire compréhension de la liste , pour lequel votre syntaxe est légèrement éteinte, lisez la syntaxe de la compréhension de la liste.
Sa syntaxe est similaire à [EXP1 (élément) si condition1 autre exp2 (élément) pour l'élément en arr] code>.
La bonne façon de le faire est la suivante.

arr = [1,2,3,4,5,6]
arr = [arr[i]**2 if i % 2 == 0 else arr[i] for i in range(len(arr))]
print(arr)
#[1, 2, 9, 4, 25, 6]


3 commentaires

Ce n'est pas une solution numpopique?


Nulle part a-t-il d'utiliser Numpy dans son code! Donc j'ai fourni une solution générique


Vrai, mais il mentionne spécifiquement juste avant le code qu'il utilise une matrice numpue ...



0
votes

Boucle pas sur des matrices numpopiques Vous perdez toute la puissance de NUMPY.

Utilisez ces fonctions numpues pour obtenir le résultat requis à la place: P>

[ 1 9   1  1  0 6   5  2  1 5 ]
[ 1 81  1  1  0 36  5  4  1 25]


0 commentaires

2
votes

Ceci fonctionne avec la compréhension de la liste: xxx

mais vous pouvez également utiliser le plus court: xxx


1 commentaires

Arr [:: 2] = Arr [:: 2] ** 2 est de loin la meilleure solution de style numpy de toutes les solutions!