2011-08-15 13 views
1

Je suis un débutant dans Mathematica. Ma question est la suivante: J'ai énorme quantité de x, coordonnées y et z dans des listes distinctes nommées XCord, YCORD, ZCORD et je veux les combiner dans une listeListes Mathematica Combinaison de coordonnées X, Y et Z

Exemple:
Si la x liste des co-oridinates est donnée par XCORD = {x1,x2,x3}, la liste des coordonnées y par YCORD = {y1,y2,y3} et la liste des coordonnées z par ZCORD = {z1,z2,z3}, je voudrais avoir une liste résultante des coordonnées qui ressemble à ceci:

{{x1,y1,z1},{x2,y2,z2},{x3,y3,z3}} 
+2

Bienvenue sur StackOverflow Faz! S'il vous plaît noter que j'ai modifié votre question un peu et supprimé votre plaidoyer désespéré. De telles déclarations sont inutiles ici pour attirer l'attention et aider. Veuillez voter pour les réponses que vous préférez en utilisant les boutons de vote, et n'oubliez pas d'accepter la réponse que vous préférez comme réponse finale en utilisant le bouton coche. Vous voudrez peut-être attendre un peu plus de réponses avant de le faire. –

Répondre

6

Vous pouvez faire ceci avec Transpose:

XCORD = {x1, x2, x3}; 
YCORD = {y1, y2, y3}; 
ZCORD = {z1, z2, z3}; 

res = Transpose[{XCORD, YCORD, ZCORD}] 

==> {{x1, y1, z1}, {x2, y2, z2}, {x3, y3, z3}} 

Plus d'informations sur le travail avec les listes peuvent être trouvées here, et plus spécifique à votre question, here.

S'il vous plaît noter qu'il est préférable (bien que cela soit permis) de ne pas démarrer une variable de votre choix avec une lettre majuscule. Utiliser un début en minuscules de votre nom de variable signifie que vous ne serez jamais en conflit avec les milliers de symboles intégrés qui commencent tous par une lettre majuscule.

+0

ah, une minute de retard :) Je vais supprimer ma réponse alors ... – acl

+1

@acl Je trichais. Avec Mr.Wizard de retour, j'ai pensé que je pourrais exécuter mon utilitaire WatchSO (http://stackoverflow.com/q/6505675/615464) et ça aide. J'ai même eu le temps d'éditer la question avant de travailler sur la réponse. –

+0

@Sjoerd J'ai commencé à signaler les réponses de M. Wiz pour avoir enfreint la limite de vitesse. Espérons qu'il sera banni s'ils peuvent l'attraper :) –

3

Autre solution en utilisant la fonction MapThread:

In[2]:= MapThread[List, {{x1, x2, x3}, {y1, y2, y3}, {z1, z2, z3}}] 

Out[2]= {{x1, y1, z1}, {x2, y2, z2}, {x3, y3, z3}} 

Pour les grandes listes, Transpose est un ordner d'une ampleur plus rapide, bien que:

In[3]:= With[{n=10^6}, x=RandomReal[1, n]; y=RandomReal[2, n]; z=RandomReal[3, n];] 

In[4]:= Transpose[{x, y, z}]; // Timing 

Out[4]= {0.644832, Null} 

In[5]:= MapThread[List, {x, y, z}]; // Timing 

Out[5]= {5.87969, Null} 
+0

Je voudrais certainement encourager les gens à se familiariser avec MapThread, il est extrêmement utile en général. D'un autre côté, ce qui est plus rapide dans ce cas: 'Transpose' ou' MapThread'? – rcollyer

+0

@rcollyer voir mise à jour la réponse – sakra

+0

merci. J'apprécie les horaires, surtout quand il y a des options concurrentes, mais j'étais un peu facétieux. – rcollyer

Questions connexes