Используя разреженные матрицы, чтобы хранить данные, которые содержат большое количество элементов с нулевым знаком, может и сохранить существенное количество памяти и ускорить обработку тех данных. sparse
является атрибутом, который можно присвоить любой двумерной матрице MATLAB®, которая состоит из элементов logical
или double
.
Атрибут sparse
разрешает MATLAB:
Для полных матриц MATLAB хранит каждый элемент матрицы внутренне. Элементы с нулевым знаком требуют того же количества пространства памяти как любой другой элемент матрицы. Для разреженных матриц, однако, MATLAB хранит только ненулевые элементы и их индексы. Для больших матриц с высоким процентом элементов с нулевым знаком эта схема значительно уменьшает объем памяти, требуемый для хранения данных.
Команда whos
предоставляет высокоуровневую информацию о матричном устройстве хранения данных, включая размер и класс памяти. Например, этот список whos
показывает информацию о разреженных и полных версиях той же матрицы.
M_full = magic(1100); % Create 1100-by-1100 matrix. M_full(M_full > 50) = 0; % Set elements >50 to zero. M_sparse = sparse(M_full); % Create sparse matrix of same. whos
Name Size Bytes Class Attributes M_full 1100x1100 9680000 double M_sparse 1100x1100 9608 double sparse
Заметьте, что количество используемых байтов является меньше в разреженном случае, потому что элементы с нулевым знаком не хранятся.
Разреженные матрицы также имеют значительные преимущества с точки зрения вычислительной эффективности. В отличие от операций с полными матрицами, операции с разреженными матрицами не выполняют ненужную низкоуровневую арифметику, такую как нуль - добавляет (x+0
всегда является x
). Получившаяся эффективность может привести к поразительным улучшениям во время выполнения для программ, работающих с большими суммами разреженных данных.