Разреженные матрицы обеспечивают эффективное хранение данных в памяти для массивов с множеством нулевых элементов. Разреженные матрицы могут обеспечить улучшенную производительность и уменьшение использования памяти для сгенерированного кода. Время расчета на разреженных матрицах масштабируется только с количеством операций на ненулевых элементах.
Функции для создания и манипулирования разреженными матрицами перечислены в Sparse Matrices. Чтобы проверить, поддерживается ли функция для генерации кода, смотрите страницу с описанием функции. Генерация кода не поддерживает разреженные матричные входы для всех функций.
Инициализируйте матрицы с помощью разреженных конструкторов, чтобы максимизировать эффективность кода. Для примера, чтобы создать матрицу тождеств 3 на 3, используйте speye(3,3)
а не sparse(eye(3,3))
.
Индексированное назначение в разреженные матрицы несет накладные расходы по сравнению с индексированным назначением в полные матрицы. Для примера:
S = speye(10); S(7,7) = 42;
Как в MATLAB®разреженные матрицы хранятся в сжатом разреженном формате столбца. Когда вы вставляете новый ненулевой элемент в разреженную матрицу, все последующие ненулевые элементы должны быть сдвинуты вниз, столбец за столбцом. Эти дополнительные манипуляции могут замедлить эффективность.
Генерация кода не поддерживает разреженные матрицы для Simulink® сигналы, параметры или память хранилища данных. Сохранение и восстановление состояния симуляции не поддерживаются.
Чтобы сгенерировать код, который использует разреженные матрицы, должно быть включено динамическое выделение памяти. Чтобы хранить изменяющееся количество ненулевых элементов и их значений, разреженные матрицы используют массивы переменного размера в сгенерированном коде. Для изменения динамических настроек выделения памяти смотрите Управление Выделением Памяти для Массивов Переменного Размера в Блоке MATLAB function. Поскольку разреженные матрицы используют массивы переменного размера для динамического выделения памяти, ограничения на данные переменного размера также применяются к разреженным матрицам.
Вы не можете назначить разреженные данные данным, которые не разрежены. Сгенерированный код использует различные представления типов данных для разреженных и полных матриц. Чтобы преобразовать в разреженные данные и из них, используйте явное sparse
и full
функции преобразования.
Вы не можете задать разреженную матрицу с конкурирующими спецификациями размера. Генератор кода фиксирует размер разреженной матрицы, когда он производит соответствующее определение типов в C/C + +. Как пример, функция foo
вызывает ошибку в генерации кода:
function y = foo(n) %#codegen if n > 0 y = sparse(3,2); else y = sparse(4,3); end
Логическое индексирование в разреженные матрицы не поддерживается для генерации кода. Для примера этот синтаксис вызывает ошибку:
S = magic(3); S(S > 7) = 42;
Для разреженных матриц вы не можете удалить элементы массива, назначив пустые массивы:
S(:,2) = [];