Используя разреженные матрицы, чтобы хранить данные, которые содержат большое количество элементов с нулевым знаком, может и сохранить существенное количество памяти и ускорить обработку тех данных. sparse
атрибут, который можно присвоить любому двумерному MATLAB® матрица, которая состоит из double
или logical
элементы.
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
). Получившиеся КПД могут привести к поразительным улучшениям во время выполнения для программ, работающих с большими суммами разреженных данных.