gpt4 book ai didi

c++ - 二维数组在 matlab 到 C++ 的转换中设置不正确

转载 作者:行者123 更新时间:2023-11-28 06:42:36 26 4
gpt4 key购买 nike

我有一个使用 Matlab Coder 转换为 C++ 的 Matlab 函数。输入是 :Infx1 的一维数组,matlab 函数的输出是二维数组。我使用

初始化这个(输出)
result = zeros(500,18); 

在我的主循环中,我维护了一个从 1 到 500 不等的变量 count,在循环结束之前,我使用

填充输出数组
result(count,:) = blocks;

其中 block 是在每个循环中计算的 18x1 vector 。

在我转换的 C++ 文件中,我希望 result 是一个二维数组。但它恰好是一个输出由

给出的 vector
for (loop_ub = 0; loop_ub < 18; loop_ub++) {
result[(count + 500 * loop_ub) - 1] = blocks[loop_ub];
}

result的初始化可以看成

memset(&result[0], 0, 9000U * sizeof(real_T));

我想不通这不是二维数组的原因。非常感谢任何帮助。

谢谢

最佳答案

所有内存最终都是平坦的(一维的),以这种方式解释时,您通常会获得最佳性能。在这种情况下,单个分配将执行(大小为 500*18*sizeof(real_T)),因此 matlab 使用它 - 由于空间局部性,您将获得更好的缓存性能。代码生成器可以将分配包装在多维数组类型中(例如,参见 this question ),但这掩盖了每行实际上在内存中是连续的这一事实,这是一个有用的事实。否则,例如,单个 memset 可用于初始化数组将不清楚。

关于c++ - 二维数组在 matlab 到 C++ 的转换中设置不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25693395/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com