Списки Mathematica, объединяющие координаты X, Y, Z - PullRequest
1 голос
/ 15 августа 2011

Я новичок в Mathematica.У меня такой вопрос: у меня огромное количество координат x, y и z в отдельных списках с именами XCORD, YCORD, ZCORD, и я хочу объединить их в один список

Пример:
Если x coсписок -оридинатов задается XCORD = {x1,x2,x3}, список координат y - YCORD = {y1,y2,y3}, а список координат z - ZCORD = {z1,z2,z3}, я хотел бы получить результирующий список координат, который выглядит следующим образом:

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

Ответы [ 2 ]

6 голосов
/ 15 августа 2011

Вы можете сделать это с помощью Транспонирование :

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}}

Более подробную информацию о работе со списками можно найти здесь , а более конкретно для вашего вопроса здесь .

Обратите внимание, что лучше (хотя это разрешено) не начинать любую собственную переменную с заглавной буквы.Использование начала имени переменной в нижнем регистре означает, что вы никогда не будете конфликтовать с тысячами встроенных символов, которые начинаются с заглавной буквы.

3 голосов
/ 15 августа 2011

Альтернативное решение с использованием функции 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}}

Для больших списков Транспонирование на порядок быстрее, но:

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}
...