同样的函数代码,为什么在函数包里运行不正常?
mathematica吧
全部回复
仅看楼主
level 5
同样的函数代码,为什么在笔记本中可以正常运行,而在函数包里运行不正常?
这是写入到wl格式的函数包里的函数的运行结果:
把同样的代码粘贴到nb笔记本中的运行结果:
函数包的书写情况:
函数代码:
(*参数调整*)ParameterAdj[Dim_, L_, {ablist__List : {}},
OptionsPattern[{DEBUG -> False}]] :=
Module[{Np, Lp, ab = Rationalize[{ablist}, 0], Lengthofab, Result},
Catch[Lengthofab = Length[ab];
If[Lengthofab == 0,
Throw["Wrong:{a,b} doesn't have an input value!"]];
If[Cases[Length /@ ab, Except[2]] =!= {},
Throw["Error:Input of {a,b} is wrong!"] ];
Np =
Flatten[ParallelTable[{n1, n2, n12}, {n1, 0, Dim}, {n2, 0,
Dim - n1}, {n12, 0, Dim - n1 - n2}], 2];
Lp = Table[{l1, L - l1}, {l1, 0, IntegerPart[L/2]}];
Result =
Flatten[ParallelTable[
Np[[i]]~Join~Lp[[j]]~Join~ab[[k]], {k, 1, Lengthofab}, {i, 1,
Np // Length}, {j, 1, Lp // Length}], 2];
Result = Cases[Result, x_ /; x[[1]] >= x[[2]]](*去掉n1<n2的项*);
ClearAll[Np, Lp, ab, Lengthofab]; Return[Result]]];
每次测试均在重启内核之后进行。
2023年04月10日 03点04分 1
level 5
通过插入Print函数检查,发现函数包里的这一截代码不能正常运行:
ParallelTable[
Np[[i]]~Join~Lp[[j]]~Join~ab[[k]], {k, 1, Lengthofab}, {i, 1,
Np // Length}, {j, 1, Lp // Length}]
在调用函数后,这个并行表格函数返回了这样的结果:{{},{},{}},在外层的Flatten作用后就使得Result的结果变成了{}。
同样是用并行表格函数,前面的局部变量Np并没有出现这种问题。。。。好奇怪啊。。。。
2023年04月10日 13点04分 2
level 5
刚才把这一截代码:Result =
Flatten[ParallelTable[
Np[[i]]~Join~Lp[[j]]~Join~ab[[k]], {k, 1, Lengthofab}, {i, 1,
Np // Length}, {j, 1, Lp // Length}], 2];
换成串行生成的,可以正常输出
换成Result =ParallelTable[99,20],可以正常输出
问题应该是出在ParallelTable的输入语句里面
2023年04月10日 13点04分 3
吧务
level 10
读一下首页上的几个聊并行的帖子吧。
2023年04月10日 23点04分 4
吧务
level 15
该说的这两帖里都说了:
tieba.baidu.com/p/8213684418
tieba.baidu.com/p/5633579420
顺便,合理怀疑你这帖里的问题也跟上下文有关:tieba.baidu.com/p/8325225260
2023年05月06日 05点05分 5
1