【发布时间】:2011-12-15 15:56:36
【问题描述】:
我最近询问了为什么PatternTest 会引起大量不必要的评估:PatternTest not optimized? Leonid 回答说,在我看来这是一种相当有问题的方法是必要的。我可以接受,但我更喜欢更有效的选择。
我现在意识到,我相信 Leonid 已经说过一段时间了,这个问题在 Mathematica 中运行得更深,我很困扰。我不明白为什么这不是或不能更好地优化。
考虑这个例子:
list = RandomReal[9, 20000];
Head /@ list; // Timing
MatchQ[list, {x__Integer, y__}] // Timing
{0., 空}
{1.014, 错误}
检查列表的头部基本上是瞬时的,但检查模式需要一秒钟。当然,Mathematica 可以认识到,由于列表的第一个元素不是整数,因此模式无法匹配,并且与 PatternTest 的情况不同,我看不出模式中存在任何可变性。对此有何解释?
关于打包数组似乎有些混乱,据我所知,这与这个问题无关。相反,我关心的是所有列表(打包或解包)的 O(n2) 时间复杂度。
【问题讨论】:
标签: performance wolfram-mathematica pattern-matching