相关疑难解决方法(0)

Mathematica的模式匹配效果不佳?

我最近询问为什么PatternTest导致大量不必要的评估:PatternTest没有优化? 列昂尼德回答说,对我来说这是一个相当可疑的方法是必要的.我可以接受,尽管我更喜欢更有效的选择.

我现在意识到,我相信列昂尼德已经说了一段时间,这个问题在Mathematica中运行得更深,我感到很困扰.我无法理解为什么这不是或不能更好地优化.

考虑这个例子:

list = RandomReal[9, 20000];
Head /@ list; // Timing
MatchQ[list, {x__Integer, y__}] // Timing
Run Code Online (Sandbox Code Playgroud)
{0., Null}
{1.014, False}

检查列表的头部基本上是即时的,但检查模式需要一秒钟.当然,Mathematica可以认识到,由于列表的第一个元素不是整数,因此模式不能匹配,与PatternTest我的情况不同,我看不出模式中是否存在任何可变性.对此有何解释?


关于打包数组似乎有些混乱,据我所知,这与这个问题无关.相反,我担心所有列表上的O(n 2)时间复杂度,打包或解包.

performance wolfram-mathematica pattern-matching

13
推荐指数
1
解决办法
554
查看次数