Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab中表达式求值的最快方法_Matlab_Expression_Eval_Mex - Fatal编程技术网

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))”
有没有比在MEX函数中模拟Matlab的eval函数更快的方法?MEX评估真的会比本地评估快吗?如果是,有多少次?

我写道:

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.