Наборы столов Mathematica - PullRequest
       17

Наборы столов Mathematica

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

У меня три таблицы X,Y,Z.Хотя X & Y определяют мои точки сетки, Z зависит от каждой точки X и Y.

x = Table[i, {i, 0, 10, 1}]
y = Table[j, {j, 0, 10, 1}]
z = Table[5*i + j, {i, 0, 10, 1}, {j, 0, 10, 1}]

Теперь я хочу, чтобы окончательный список выглядел следующим образом [{x1,y1,z1},{x2,y2,z2}}

Я хочу создать набор соответствующих x,y,z значений из таблицы, приведенной выше.

Ответы [ 3 ]

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

В этом случае вы также можете создать комбинированный список с Array следующим образом:

Array[{##, 5 # + #2} &, {11, 11}, 0]

См. Function и Slot. rcollyer уже показал, как «отделить» x, y и z от этого.

При запуске с несвязанными списками x и y вы можете создать комбинированный список с помощью Outer:

Outer[{##, 5 # + #2} &, x, y, 1]
4 голосов
/ 15 августа 2011

Если вам не нужны списки x и y, я бы объединил их в один Table следующим образом:

Table[{i, j, 5*i + j}, {i, 0, 10}, {j, 0, 10}]

Обратите внимание, я удалил длину шага ({i, 0, 10, 1}-> {i, 0, 10}), поскольку оно неявно установлено в 1, если оно не включено.

Редактировать : Если вы хотите иметь списки x и y, вы также можете выполнить следующие действия:

Table[{i, j, 5*i+j}, {i, x}, {j, y}]

Начиная с версии 7, Table принимает списки значений в дополнение к начальной и конечной точкам.Это также не относится к тому, нужен ли вам отдельный список для z.В этом случае я бы начал с первого бита формы и использовал Transpose (для вашего другого вопроса ), чтобы установить отдельные списки следующим образом:

coords = Table[{i, j, 5*i + j}, {i, 0, 10}, {j, 0, 10}];
{x, y, z} = Transpose @ coords;
2 голосов
/ 15 августа 2011

Один из способов сделать это, начиная с вашего

x = Table[i, {i, 0, 10, 1}];
y = Table[j, {j, 0, 10, 1}];
z = Table[5*i + j, {i, 0, 10, 1}, {j, 0, 10, 1}];

есть

Flatten[
    MapThread[{Sequence @@ #1, #2} &,
        {Outer[{#1, #2} &, x, y], z},
        2
    ],
    1
]

(я бы хотел, чтобы я попытался понять это через неделю), что дает то, что вы хотите.

Это также работает:

p = {};
Do[
    Do[
        AppendTo[p, {x[[i]], y[[j]], z[[i, j]]}],
        {j, 1, Length@y}
    ],
    {i, 1, Length@x}
]

и дает тот же ответ.

...