Mathematica - 在循环中使用Join函数作为向量

时间:2015-08-29 11:09:52

标签: loops join vector wolfram-mathematica

我想在循环中使用Join函数组合一些向量,但不幸的是它不起作用。

组合1:

i=3;
k=4;
v1 = Range[k]
(* {1, 2, 3, 4} *)

现在我想将向量v1组合3次(i=3)到向量v2:

v2 = {1,2,3,4,1,2,3,4,1,2,3,4}

我能够手动完成(v2 = Join[v1, v1, v1, 1])但我需要循环执行此操作。

这不起作用,我不知道如何以正确的方式做到这一点:

For[i = 1, i < 4, i++, Join[v1, v2, 1]]

有人知道怎么做吗?

与组合2几乎相同的问题:

v[5] = {1, 3, 5}
v[6] = {7, 9, 11}
v[7] = {13, 15, 17}

我想将它们与一个循环组合到矢量v3:

v3 = {1,3,5,7,9,11,13,15,17}

和agian我不知道怎么做,因为这个循环不起作用:

For[i = 5, i < 8, i++, Join[v[i],1]]

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

评论中已经讨论过最重要的一点:Join没有特定于第一个参数,对其参数没有副作用。

另外,为什么系统地使用level参数(Join每次使用结束时使用“,1”?

如果你想在Mathematica中做一些迭代,为什么要使用For循环?

第一个例子

i=3;
k=4;
v1 = Range[k]

Nest[Join[#,v1]&, {}, i]

编辑:当然不需要Nest

Join@@Array[v1&, 3]

如果我采取你的第二个例子

v[5] = {1, 3, 5};
v[6] = {7, 9, 11};
v[7] = {13, 15, 17};

Fold[Join, {}, {v[5], v[6], v[7]}]

很好。

Fold[Join, {}, Map[ v, Range[5,7]] ]

Fold[Join, {}, Array[ v, 3, 5]]

Fold[Join, {}, Table[ v[i], {i,5,7}]]

如果您愿意。

编辑:不需要 Fold

Join @@ {v[5], v[6], v[7]}

或此表单与列表生成器列表的任何组合都将执行

但使用Fold可能会让您进行更复杂的处理。