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

发布于 2025-01-08 13:22:05 字数 309 浏览 1 评论 0原文

输入:

  • 任意逻辑向量(~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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

雨落星ぅ辰 2025-01-15 13:22:05

我写道:(

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 例程仍将被唤醒。

但我期待着被证明是错误的,就像我经常做的那样。

I wrote:

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);

(yes, these vectors only have 1M elements, not 2M)

then

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

which gave

Elapsed time is 0.047936 seconds.

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.

诠释孤独 2025-01-15 13:22:05

我已将 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)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文