2-мерный массив не установлен должным образом в преобразовании Matlab в C ++

У меня есть функция Matlab, преобразованная в C ++ с использованием Matlab Coder. Вход представляет собой одномерный массив :Infx1 и вывод функции Matlab представляет собой двумерный массив. Я инициализирую это (вывод), используя

result = zeros(500,18);

В моем основном цикле я поддерживаю переменную count который варьируется от 1 до 500, и до конца цикла я заполняю выходной массив, используя

result(count,:) = blocks;

где блоки — это вектор 18×1, вычисляемый в каждом цикле.

В моем преобразованном файле 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));

Я не могу понять причину, почему это не двумерный массив. Любая помощь высоко ценится.

Спасибо

0

Решение

Вся память в конечном счете плоская (одномерная), и вы часто получаете лучшую производительность при такой интерпретации. В этом случае подойдет одно выделение (размером 500 * 18 * sizeof (real_T)), так что Matlab использует его — вы получите лучшую производительность кэширования благодаря пространственной локализации. Генератор кода мог бы обернуть выделение в тип многомерного массива (например, см. этот вопрос), но это скрывает тот факт, что каждый ряд на самом деле является непрерывным в памяти, полезный факт, чтобы знать. В противном случае, например, было бы непонятно, что для инициализации массива можно использовать один набор mem.

1

Другие решения


По вопросам рекламы [email protected]