exponenta event banner

редкий

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

Описание

пример

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

пример

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

пример

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

Если входные данные i, j, и 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 из триплетов 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 должен иметь один и тот же тип данных. Если либо 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 ® хранит разреженные матрицы в сжатом формате разреженных столбцов. Дополнительные сведения см. в статьях Джона Р. Гилберта, Клеве Молера и Роберта Шрайбера «Разреженные матрицы в MATLAB: дизайн и реализация».

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

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

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

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

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