sparse

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

Описание

пример

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

пример

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

пример

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

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

пример

S = sparse(i,j,v,m,n) задает размер S как m- 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 разреженную матрицу из триплетов iJ, и 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]). Однако, если размеры iJ, и 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