sparse

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

Описание

пример

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). The max(i)-by- max(j) выходная матрица имеет пространство, отведенное для length(v) ненулевые элементы.

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

Примеры

свернуть все

Создайте полную матрицу тождеств хранения данных размером 10000 на 10000.

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) -by- 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

The 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]). Однако, если размеры 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

Ограничения

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

Совет

  • MATLAB® сохраняет разреженные матрицы в сжатом разреженном формате столбца. Для получения дополнительной информации см. John R. Gilbert, Cleve Moler, и Robert Schreiber's Sparse Matrices In MATLAB: Design and Implementation.

  • The accumarray функция имеет поведение накопления, аналогичное поведению sparse.

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

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

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

.
Представлено до R2006a
Для просмотра документации необходимо авторизоваться на сайте