2011-02-02 4 views
7

J'ai deux tableaux numpy 2D comme celui-ci, représentant les distances x/y entre trois points. J'ai besoin des distances x/y comme tuples dans un seul tableau.Assemblage de deux tableaux numpy 2D dans un seul tableau 2D de 2-tuples

donc de:

x_dists = array([[ 0, -1, -2], 
       [ 1, 0, -1], 
       [ 2, 1, 0]]) 

y_dists = array([[ 0, -1, -2], 
       [ 1, 0, -1], 
       [ 2, 1, 0]]) 

J'ai besoin:

dists = array([[[ 0, 0], [-1, -1], [-2, -2]], 
       [[ 1, 1], [ 0, 0], [-1, -1]], 
       [[ 2, 2], [ 1, 1], [ 0, 0]]]) 

J'ai essayé d'utiliser diverses permutations de dstack/hstack/vstack/concatenate, mais aucun d'entre eux semblent faire ce que je veux . Les tableaux réels dans le code sont susceptibles d'être gigantesques, donc itérer sur les éléments en python et faire le réarrangement "manuellement" n'est pas une option rapide.

Edit: C'est ce que je suis venu avec à la fin: https://gist.github.com/807656

+1

Est-ce est juste une coïncidence que '' x_dist' et y_dist' sont les mêmes? Aussi, quelle est la signification de la distance négative dans votre application? Est-ce que '_dist' serait toujours 'symétrique', mais la partie uppertridiagonale serait juste négative? Combien de points comptez-vous gérer? Quel est le but de cet empilement de tableaux? Les éléments seraient-ils dans un ordre «optimal» pour d'autres calculs? Juste quelques difficultés, merci – eat

+0

C'est une coïncidence. Les points d'exemple sont (0, 0), (1, 1), (2, 2) pour l'amour de la santé mentale. _dist est en effet symétrique. Le but de l'empilement des tableaux est que je peux les utiliser pour déplacer les points. Voir l'essentiel lié. – Zarkonnen

Répondre

10
import numpy as np 
dists = np.vstack(([x_dists.T], [y_dists.T])).T 

retours dists comme vous les vouliez. Ensuite, ce n'est pas "un seul tableau 2D de 2-tuples", mais un tableau 3D normal où le troisième axe est la concaténation des deux tableaux originaux.

Vous voyez:

dists.shape # (3, 3, 2) 
+1

C'est en effet ce que je voulais. Je crains que mon utilisation du terme «tableau 2D de 2-tuples» soit plutôt trompeuse. :( – Zarkonnen

+0

Mais votre exemple de «dists» attendus était clair :) – eumiro

7
numpy.rec.fromarrays([x_dists, y_dists], names='x,y') 
+0

Brillant! C'est exactement ce que je voulais. Donc, euh, vu que vous semblez savoir à propos de numpy, est la fonction que j'ai édité d'une manière saine de calculer ces distances par paires? – Zarkonnen

+0

Edit: En fait, cela ne me donne pas un tableau, je sais comment faire quelque chose avec. – Zarkonnen