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

0

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

result = zeros(500,18); 

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

result(count,:) = blocks;

где блоки представляют собой вектор 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));

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

благодаря

Теги:
arrays
matlab-coder

1 ответ

1
Лучший ответ

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню