Использование разреженных матриц для хранения данных, которые содержат большое количество нулевых элементов, может как сохранить значительный объем памяти, так и ускорить обработку этих данных. sparse
- атрибут, который можно назначить любому двумерному MATLAB® матрица, которая состоит из double
или logical
элементы.
The sparse
атрибут позволяет MATLAB:
Для полных матриц MATLAB хранит каждый элемент матрицы внутри. Элементы с нулевым значением требуют такого же количества пространства хранения, как и любые другие элементы матрицы. Однако для разреженных матриц MATLAB хранит только ненулевые элементы и их индексы. Для больших матриц с высоким процентом нулевых элементов эта схема значительно уменьшает объем памяти, необходимый для хранения данных.
The 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
Заметьте, что количество используемых байтов меньше в разреженном случае, потому что нулевые элементы не сохранены.
Разреженные матрицы также имеют значительные преимущества с точки зрения вычислительной эффективности. В отличие от операций с полными матрицами, операции с разреженными матрицами не выполняют ненужную низкоуровневую арифметику, такую как нуль -adds (x+0
всегда x
). Полученная эффективность может привести к резкому улучшению времени выполнения для программ, работающих с большими объемами разреженных данных.