Matlab中表达式求值的最快方法
投入:Matlab中表达式求值的最快方法,matlab,expression,eval,mex,Matlab,Expression,Eval,Mex,投入: 任意逻辑向量(~2M个元素):i1,i2,…,in 任意逻辑表达式:例如,“or(and(非(i1),i2),xor(i3,i4))” 输出: 结果逻辑向量oo=eval(“或(和(非(i1),i2),异或(i3,i4))” 有没有比在MEX函数中模拟Matlab的eval函数更快的方法?MEX评估真的会比本地评估快吗?如果是,有多少次?我写道: i1 = randi([0,1],1,10^6); i2 = randi([0,1],1,10^6); i3 = randi([0,1
- 任意逻辑向量(~2M个元素):
i1,i2,…,in
- 任意逻辑表达式:例如,
“or(and(非(i1),i2),xor(i3,i4))”
- 结果逻辑向量o
o=eval(“或(和(非(i1),i2),异或(i3,i4))”
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个)
然后
给
Elapsed time is 0.047936 seconds.
我认为,使用MEX函数将很难更快地获得结果;我的直觉是,当纯Matlab解决方案站稳脚跟,打开一杯冷啤酒时,MEX例程仍然会醒来
但我期待着被证明是错误的,就像我经常做的那样。我已经将eval实现为一个MEX函数。我在深度为4的随机表达式上进行了测试。My MEX eval比Matlab native eval快2倍(15.1s vs 31.4s,1000次迭代)如果您将表达式限制为非常有限的运算子集,那么您可能会创建一个更快的计算器。只有逻辑运算-and、or、nor、nand、xor,表达式是它们的任意组合(表达式的最大深度是,比方说,4)运算问题是计算从文件读取的任意表达式,而不是计算这个特定的表达式
Elapsed time is 0.047936 seconds.