разреженный

Создайте разреженную матрицу

Синтаксис

S = sparse(A)
S = sparse(m,n)
S = sparse(i,j,v)
S = sparse(i,j,v,m,n)
S = sparse(i,j,v,m,n,nz)

Описание

пример

S = sparse(A) преобразовывает полную матрицу в разреженную форму путем отжимания любых нулевых элементов. Если матрица содержит много нулей, преобразовывание матрицы к разреженному устройству хранения данных сохраняет память.

пример

S = sparse(m,n) генерирует m-by-n вся нулевая разреженная матрица.

пример

S = sparse(i,j,v) генерирует разреженную матрицу S от триплетов i, j и v, таким образом что S(i(k),j(k)) = v(k). max(i)-by-max(j) выходная матрица выделили пробел для length(v) ненулевые элементы. sparse добавляет вместе элементы в v, которые имеют дублирующиеся индексы в i и j.

Если входные параметры i, j и v являются векторами или матрицами, у них должно быть то же число элементов. Также аргумент v и/или один из аргументов i или j могут быть скалярами.

пример

S = sparse(i,j,v,m,n) задает размер S как m-by-n.

пример

S = sparse(i,j,v,m,n,nz) выделяет место для nz ненулевые элементы. Используйте этот синтаксис, чтобы выделить дополнительное место для ненулевых значений, чтобы быть заполненными в после конструкции.

Примеры

свернуть все

Создайте 10,000 10,000 полную единичную матрицу устройства хранения данных.

A = eye(10000);
whos A
  Name          Size                   Bytes  Class     Attributes

  A         10000x10000            800000000  double              

Эта матрица использует 800 мегабайтов памяти.

Преобразуйте матрицу в разреженное устройство хранения данных.

S = sparse(A);
whos S
  Name          Size                Bytes  Class     Attributes

  S         10000x10000            240008  double    sparse    

В разреженной форме та же матрица использует примерно 0,25 мегабайта памяти. В этом случае можно избежать полного устройства хранения данных полностью при помощи функции speye, которая создает разреженные единичные матрицы непосредственно.

S = sparse(10000,5000)
S = 
   All zero sparse: 10000x5000

Создайте 1500 1500 разреженную матрицу из триплетов i, j и v.

i = [900 1000];
j = [900 1000];
v = [10 100];
S = sparse(i,j,v,1500,1500)
S = 
 (900,900)     10
(1000,1000)   100

Когда вы задаете размер, больше, чем max(i) max(j), функция sparse заполняет вывод дополнительными строками и столбцами нулей.

size(S)
ans = 1×2

        1500        1500

Создайте разреженную матрицу с ненулевыми значениями 10, но которому выделили пробел для ненулевых значений 100.

S = sparse(1:10,1:10,5,20,20,100);
N = nnz(S)
N = 10
N_alloc = nzmax(S)
N_alloc = 100

Функция spalloc является кратким способом создать разреженную матрицу без ненулевых элементов, но которому выделили пробел для некоторого количества ненулей.

Используйте повторенные индексы, чтобы накопить значения в одну разреженную матрицу, которая в противном случае потребовала бы одного или нескольких циклов.

Создайте вектор-столбец данных и два вектор-столбца индексов.

i = [6 6 6 5 10 10 9 9]';
j = [1 1 1 2 3 3 10 10]';
v = [100 202 173 305 410 550 323 121]';

Визуализируйте индексы и значения бок о бок.

[i,j,v]
ans = 8×3

     6     1   100
     6     1   202
     6     1   173
     5     2   305
    10     3   410
    10     3   550
     9    10   323
     9    10   121

Используйте функцию sparse, чтобы накопить значения, которые имеют идентичные индексы.

S = sparse(i,j,v)
S = 
   (6,1)      475
   (5,2)      305
  (10,3)      960
   (9,10)     444

Входные параметры

свернуть все

Введите матрицу, заданную как полная или разреженная матрица. Если A уже разрежен, то sparse(A) возвращает A.

Типы данных: double | logical
Поддержка комплексного числа: Да

Нижние пары, заданные в качестве отдельных аргументов скаляров, векторов или матриц. Соответствующие элементы в i и j задают пары индекса S(i,j), которые определяют размещение значений в v в вывод. Если или i или j являются вектором или матрицей, то другой вход может быть скаляром или может быть вектором или матрицей с тем же числом элементов. В этом случае sparse использует i(:) и j(:) как индексы. Если i и j имеют идентичные значения для нескольких элементов в v, то те элементы добавляются вместе.

Примечание

Если значение в i или j больше, чем 2^31-1 для 32-битных платформ или 2^48-1 на 64-битных платформах, то разреженная матрица не может быть создана.

Типы данных: double | logical

Значения, заданные как скаляр, вектор или матрица. Если v является вектором или матрицей, то одни из входных параметров i или j должны также быть вектором или матрицей с тем же числом элементов.

Любые элементы в v, которые являются нулем, проигнорированы, как соответствующие индексы в i и j. Однако, если вы не задаете размеры размерности вывода, m и n, затем sparse вычисляет максимумы m = max(i) и n = max(j) прежде, чем проигнорировать любые нулевые элементы в v.

Типы данных: double | logical
Поддержка комплексного числа: Да

Размер каждой размерности, заданной в качестве отдельных аргументов целочисленных значений. Если вы задаете m (размер строки), также необходимо задать n (размер столбца).

Если вы не задаете m и n, то sparse использует значения по умолчанию m = max(i) и n = max(j). Эти максимумы вычисляются, прежде чем любые нули в v удалены.

Типы данных: double

Выделение ресурсов хранения для ненулевых элементов, указанных как неотрицательное целое число. nz обычно должен быть больше, чем или равным max([numel(i), numel(j), numel(v), 1]). Однако, если размеры i, j и v позволяют вам задавать значение 0 для nz, затем sparse вместо этого устанавливает значение к 1.

Для разреженной матрицы, S, функция nnz возвращает количество ненулевых элементов в матрице, и функция nzmax возвращает сумму устройства хранения данных, выделенного для ненулевых элементов матрицы. Если nnz(S) и nzmax(S) возвращают различные результаты, то больше устройства хранения данных может быть выделено, чем на самом деле требуется. Поэтому установите nz только в ожидании более поздней временной замены.

Если вы не задаете nz, то sparse использует значение по умолчанию max([numel(i), numel(j), numel(v), 1]).

Типы данных: double

Советы

  • MATLAB® хранит разреженные матрицы в сжатом разреженном формате столбца. Для получения дополнительной информации смотрите Джона Р. Гильберта, Клив Молер и Разреженные матрицы Роберта Шрайбера В MATLAB: Разработка и реализация.

  • Функция accumarray имеет подобное поведение накопления к тому из sparse.

    • Данные групп accumarray в интервалы с помощью n - размерные индексы, но данные групп sparse в интервалы с помощью 2D индексов.

    • accumarray добавляет элементы, которые имеют идентичные индексы в вывод по умолчанию, но могут опционально применить любую функцию к интервалам. sparse только добавляет элементы, которые имеют идентичные индексы в вывод.

Расширенные возможности

Представлено до R2006a