在Matlab中评估表达式的最快方法

时间:2012-02-23 10:56:26

标签: matlab expression eval mex

输入:

  • 任意逻辑向量(~2M元素):i1,i2,...,in
  • 任意逻辑表达式:例如。 "or(and(not(i1),i2),xor(i3,i4))"

输出:

  • 生成逻辑向量o o=eval("or(and(not(i1),i2),xor(i3,i4))")

有没有比在MEX函数中模拟Matlab的eval函数更快的方法? MEX eval实际上是否比本机eval更快?如果是,多少次?

2 个答案:

答案 0 :(得分:1)

我写道:

i1 = randi([0,1],1,10^6);
i2 = randi([0,1],1,10^6);
i3 = randi([0,1],1,10^6);
i4 = randi([0,1],1,10^6);

(是的,这些向量只有1M个元素,而不是2M)

然后

tic,or(and(not(i1),i2),xor(i3,i4)); toc

给了

Elapsed time is 0.047936 seconds.

我认为你很难使用MEX功能更快地获得结果;我的直觉是,当纯Matlab解决方案抬起并打开冰镇啤酒时,MEX程序仍将醒来。

但我期待被证明是错的,因为我经常这样。

答案 1 :(得分:0)

我已经将eval实现为MEX功能。我在深度为4的随机表达式上测试了它。我的MEX eval比Matlab原生eval快2倍(15.1s vs 31.4s,1000次迭代)