MATLAB Coder кажется причудливым и может значительно ускорить код MATLAB, преобразовывая код в C/C++ или MEX. Но кажется, что он не поддерживает разреженную матрицу или функцию Matlab sparse
, которая необходима для моего кода. Кто-нибудь знает, как побороть эту проблему? Большое спасибо!
MATLAB Coder: разреженная матрица
Ответы (3)
собственная библиотека может использоваться для обработки разреженной функции Matlab, и она находится в c язык.
Как сказал «libill», вы также можете просто сгенерировать код MEX для частей вашего кода MATLAB, который не использует разреженность для ускорения этих частей.
И для разреженной части используйте вышеуказанную библиотеку.
Мое понимание кодера Matlab может быть неправильным, но я думаю, что это инструмент, который преобразует ваши коды Matlab в коды C/C++. Я не уверен, что оптимизация производительности является целью кодера Matlab.
Взгляните на SuiteSparse. Это библиотека C, которая обрабатывает множество разреженных операций. Оператор Matlab «\» в случае разреженной матрицы фактически использует suitesparse. Поэтому я думаю, что вам может быть проще изменить сгенерированные Matlab коды C.
ХТН
Я просто не уверен, что вы подразумеваете под преобразованием. Я предполагаю, что вы имеете в виду написание своей собственной функции mex. Разреженные пакеты обычно обрабатывают разреженные матрицы по-разному, и у Matlab также есть свой уникальный способ их обработки. Однако в основном они используют формат CSC (или CSR). Matlab также сохраняет матрицу в формате CSC.
Вы можете просмотреть множество разреженных пакетов mex-функций, чтобы увидеть, как это делается. Дело в том, что Matlab не позволит вам сохранять явные нули в своей разреженной структуре данных. НЕ ПЫТАЙТЕСЬ сохранить явные нули в mex-функции Matlab. Matlab задохнется от вас!