【发布时间】:2017-01-28 16:21:31
【问题描述】:
如何改进以下功能?目前它非常缓慢。提前致谢。
discounts[firstDFF_] :=
Module[
{len = Length[swapdata], running = firstDF, newdisc, disclist = {firstDFF}, k = 2},
Do[
newdisc = (1 - swapdata[[k]]*running)/(1 + swapdata[[k]]);
running += newdisc;
AppendTo[disclist, newdisc]
,
{k, 1, len}
];
disclist
];
它用于在引导过程中获取折扣因子列表。
【问题讨论】:
-
Join[disclist, Reap[ Do[ ... Sow[newdisc], {k, 1, len}] ][[2, 1]] ] 因此,您使用 Sow 而不是 AppendTo这将快速收集您的 Do 中生成的所有项目,然后您使用 [[2,1]] 获取结果列表,然后您在 Do 之外使用 Join 完成。
-
把你的
Do变成Table,所以整个事情看起来就像Prepend[Table[newdisc = (1 - swapdata[[k]]*running)/(1 + swapdata[[k]]);running += newdisc;newdisc,{k,len}],firstDFF] -
为什么声明
k=2,然后只使用k作为循环变量?Do本地化它的迭代器变量。考虑使用FoldList而不是Do。 -
谢谢大家!它真的很有帮助!赞赏!
标签: performance loops optimization append wolfram-mathematica