【问题标题】:matlab structure mexmatlab结构mex
【发布时间】:2013-02-12 10:49:51
【问题描述】:

我正在寻求速度和性能非常重要的项目中的一些建议。

我创建了一个模型,该模型由一个外部函数和 1 个 for 循环(25 000 次迭代)组成,该函数调用多个定制函数。为了提高模型的性能,我将自定义函数重写为 MEX 函数。这已经提供了很好的加速。但是,我还想将外部 for 循环放在 MEX 函数中。但是我在将数据从 MATLAB 传递到 MEX 函数时遇到问题。 (请注意,无法对 for 循环进行矢量化)。

在模型模拟之前已知的数据被保存到一个大型嵌套数组结构中(以“data.Q.position1”的形式构建,“position1”是一个包含 10000 个双精度数的数组)。所有包含双精度的数组都具有相同的长度。模型的结果也会写入到这个数组结构中(当然是不同的字段名,在for循环之前进行预分配)

所以目前,模型看起来像这样:

[data]  = function model(data)
for i=1:10000
    data.Q.position1(i) = MEX-function1(data.WL.position4(i), data.WL.position3(i), …);
    data.Q.position2(i) = MEX-function1(data.WL.position6(i), data.WL.position12(i), …);
    …
    data.WL.position7(i) = MEX-function2(data.Q.position1(i), …);
     …
end

我选择了数组的结构,这样我就可以轻松地指向函数输入所需的变量。

所以我的问题是,如何将 for 循环放在 MEX 函数中,我与结构有什么关系?我对 MEX 和 C 语言真的很陌生,所以也许有一个简单的解决方案......

其次,整个概念在性能方面看起来不错,还是有更好的解决方案可用?

提前致谢!

【问题讨论】:

  • 我想您的 sn-p 中出现错误,因为您使用索引 i 尚未定义的输入。虽然这应该是正确的,但您可以在其上使用 parfor。

标签: performance matlab structure mex


【解决方案1】:

mxGetFieldmxSetField 开始,然后从那里跟踪文档...

【讨论】:

  • 感谢您的回复。我还有另一个(简单)问题: Image 我有以下结构:data.WL.position1(包含 1000 个双精度数)。如何在保留其他双精度的同时快速更改第 n 个双精度?
  • @user2064413 - 在 matlab 中,您只需访问 data.WL.positions1(n)。在墨西哥,您必须阅读相应的mxArray 并通过mxGetPr 访问其double*。你可以复制这个数组,改变它并返回给调用者。
  • @user2064413 很高兴我能帮上忙...您可以随时为这个答案投票... ;-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-18
  • 2012-04-10
相关资源
最近更新 更多