Mathematica表集

时间:2011-08-15 15:51:33

标签: list wolfram-mathematica nested-sets

我有三张桌子X,Y,Z。虽然X& Y定义我的网格点Z取决于XY的每个点。

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 个答案:

答案 0 :(得分:6)

在这种情况下,您还可以使用Array生成合并列表,如下所示:

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

请参阅FunctionSlot。 rcollyer已经展示了如何从中分离出x,y和z。

从不相关的列表xy开始时,您可以使用Outer生成合并列表:

Outer[{##, 5 # + #2} &, x, y, 1]

答案 1 :(得分:4)

除非您需要xy列表,否则我会将其合并到一个Table中,如下所示:

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

注意,我删除了步长({i, 0, 10, 1} - > {i, 0, 10}),因为如果不包含它,它会隐式设置为1。

修改:如果您希望获得xy列表,也可以执行以下操作

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

从第7节开始,Table除了起点和终点之外还接受值列表。这并不能解决您是否还需要z的单独列表。在这种情况下,我将从第一个表单代码开始,并使用Transpose(根据您的其他question)设置各个列表,如下所示:

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

答案 2 :(得分:2)

开始的一种方法
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}
]

并给出相同的答案。