Вычислительные преимущества разреженных матриц

Управление памятью

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

Похожие темы

Была ли эта тема полезной?