我想在循环中使用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]]
感谢您的帮助!
答案 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
可能会让您进行更复杂的处理。