2 votes

Comment ajouter un décalage à toutes les coordonnées dans un tableau numpy à deux colonnes ?

Le code python ci-dessous crée des données pour un tableau numpy que j'utilise pour représenter une boîte unitaire sur un graphique :

box = np.array([[x, y] for x in np.arange(0.0, 1.01, 0.01) for y in
               np.arange(0.0, 1.01, 0.01)])

Je veux transformer box -- en ajoutant un nombre à la composante x et un nombre différent à la composante y -- dans un autre tableau numpy afin que la nouvelle case apparaisse ailleurs sur le graphique.

J'ai du mal à savoir si je peux découper un tableau numpy pour faire l'addition dont j'ai besoin ou quelle serait la syntaxe de boucle correcte.

Ma question est la suivante : comment ajouter, disons 1 à chaque élément x et 3 à chaque élément y ?

Donc, si un élément du tableau initial de numpy était [0.8, 0.5] cet élément particulier sera alors (dans le nouveau tableau) : [1.8, 3.5] . Tous les autres éléments verraient leurs valeurs x et y mises à jour de la même manière.

2voto

Mad Physicist Points 3218

Vous pouvez utiliser la diffusion. Pour l'instant, vous avez un (n, 2) réseau. Vous pouvez y ajouter directement un tableau à deux éléments.

offset = [1., 3.]
box2 = box + offset

Cela fonctionne car les dimensions s'alignent à droite pour la diffusion (et la liste offset est automatiquement converti en tableau). (n, 2) diffuse très bien avec (2,) .

Pour effectuer l'opération in-place (en utilisant la même mémoire au lieu de créer un nouveau tableau de sortie) :

box += offset

Pendant que vous y êtes, vous pouvez jeter un coup d'oeil à np.meshgrid y cette question pour des exemples de la façon de créer la boîte de manière beaucoup plus efficace que les compréhensions de listes en python.

1voto

Sai Sreenivas Points 1620

Vous pouvez faire quelque chose comme ceci (juste pour expliquer comment cela fonctionne pour les colonnes individuelles) :

# data is the array containing x,y values

data[:,:1] += 1 # for the first column
data[:,1:] += 3 # for the second column

print(data)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X