我在Mathematica中编程,我正在尝试避免多个for循环。
令n为给定整数,f为取n元组的函数。给定绑定k,我正在寻找一种有效的方法来遍历所有n元组,其中每个条目的范围从-k到k。 (我会将n元组插入f。)
我尝试了Mathematica的函数Tuples [Range [-k,k],n],除了我经常希望n大约是8,10或甚至15,甚至k小到2,(我想要k)要至少4或5)内存将耗尽试图保持(2k + 1)^ n元组。
我最初使用n for循环,它确实有效。现在我想改变n,我不能手动进入并为每个n插入代码。
感谢您提供任何帮助和建议!
答案 0 :(得分:0)
这是一种以编程方式构建嵌套循环的方法:
ftup[tup_] := Print[tup]
n = 2
k = 1
Do @@ Join[{Unevaluated[ftup[Array[ a, n]]]},
Table[ { a[i], -k, k } , {i, n }]]
这表明我们正在复制内置元组:
ftup[tup_] := Sow[tup];
n = 6;
k = 3;
Last@Last@Reap[ Do @@
Join[{Unevaluated[ftup[Array[ a, n]]]},Table[ { a[i], -k, k } , {i, n }]] ]
== Tuples[ Range[-k, k] , {n}]
答案 1 :(得分:0)
我认为你只需要一个循环。这是为你打印所有必要元组的那个:
With[{k = 2, n = 3}, Do[Print[IntegerDigits[i, 2 k + 1, n] - k], {i, 0, (2 k + 1)^n - 1}]];