繁体   English   中英

在Matlab中正确设置二维数组到C ++的转换

[英]2-dimensional array not set properly in matlab to C++ conversion

我有一个使用Matlab Coder转换为C ++的Matlab函数。 输入是:Infx1一维数组,而matlab函数的输出是2D数组。 我使用以下方法初始化(输出)

result = zeros(500,18); 

在我的主循环中,我维护一个从1到500的可变count ,在循环结束之前,我使用以下命令填充输出数组

result(count,:) = blocks;

其中,block是在每个循环中计算的18x1向量。

在我转换后的C ++文件中,我期望result是二维数组。 但是它恰好是一个向量,其输出为

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会使用它-由于空间局部性,您将获得更好的缓存性能。 代码生成器本可以将分配包装为多维数组类型(例如,请参见此问题 ),但是这掩盖了每一行实际上在内存中是连续的这一事实,这是一个有用的事实。 否则,例如,不清楚是否可以使用单个内存集来初始化数组。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM