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) ненулевые элементы.

Если входные параметры 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 должен иметь совпадающий тип данных. Если любой i или j вектор или матрица, затем другой вход может быть скаляром или может быть вектором или матрицей с тем же числом элементов. В этом случае, sparse использование i(:) и j(:) как индексы.

Если i и j имейте идентичные значения для нескольких элементов в vто sparse агрегировал значения в v это повторило индексы. Поведение агрегации зависит от типа данных значений в v:

  • Для логических значений, sparse применяется any функция.

  • Для двойных значений, sparse применяется sum функция.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | 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

Ограничения

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

Советы

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

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

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

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

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

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