在 Matlab 中评估表达式的最快方法
输入:
- 任意逻辑向量(~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 评估实际上会比本机评估更快吗?如果是的话,有多少次?
Inputs:
- arbitrary logical vectors (~2M elements):
i1,i2,...,in
- arbitrary logical expression: eg.
"or(and(not(i1),i2),xor(i3,i4))"
Output:
- resulting logical vector o
o=eval("or(and(not(i1),i2),xor(i3,i4))")
Is there any faster way than simulating Matlab's eval function in MEX function? Would the MEX eval be actually faster than native eval? If yes, how many times?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我写道:(
是的,这些向量只有 1M 个元素,而不是 2M)
然后
我认为
你将很难使用 MEX 函数更快地获得结果;我的直觉是,当纯 Matlab 解决方案站起来并打开一杯冰啤酒时,MEX 例程仍将被唤醒。
但我期待着被证明是错误的,就像我经常做的那样。
I wrote:
(yes, these vectors only have 1M elements, not 2M)
then
which gave
I think you'll struggle to get a result faster using a MEX function; my gut feeling is that the MEX routine will still be waking up when the pure Matlab solution has put its feet up and cracked open a cold beer.
But I look forward to being proved wrong as I so often am.
我已将 eval 实现为 MEX 函数。我在深度为 4 的随机表达式上进行了测试。我的 MEX 评估比 Matlab 原生评估快 2 倍(15.1 秒 vs 31.4 秒,1000 次迭代)
I've implemented eval as a MEX function. I tested it on random expressions of depth 4. My MEX eval is 2x faster than Matlab native eval (15.1s vs 31.4s, 1000 iterations)