Иллюстрированный самоучитель по MatLab

Работа с ненулевыми элементами разреженных матриц

Поскольку разреженные матрицы содержат ненулевые элементы, то предусмотрен ряд функций для работы с ними:

  • nnz(X) – возвращает число ненулевых элементов матрицы X. Плотность разреженной матрицы определяется по формуле nnz(X)/numel (X). Пример:
h = sparse(hilb(10));
>> nnz(h)
ans =
100
  • nonzeros(A) – возвращает полный вектор-столбец ненулевых элементов матрицы А, выбирая их последовательно по столбцам. Эта функция дает только выход s, но не значения i и j из аналогичного выражения [i, j,s]=find(A). Вообще, length(s)=nnz(A)xnzmax(A)xprod(size(A)). Пример:
>> g=nonzeros(sparse(hankel([1.2.8])))
g =
1
2
  • nzmax(S) – возвращает количество ячеек памяти для ненулевых элементов. Обычно функции nnz(S) и nzmax(S) дают один и тот же результат. Но если S создавалась в результате операции над разреженными матрицами, такой как умножение или LU-разложение, может быть выделено больше элементов памяти, чем требуется, и nzmax(S) отражает это. Если S – разреженная матрица, то nzmax(S) – максимальное количество ячеек для хранения ненулевых элементов. Если S – полная матрица, то nzmax(S)=numel(S).

Пример:

>> q=nzmax(sparse(hankel([1.7.23])))
q =
6
  • S=spalloc(m,n,nzmax) – создает массив для разреженной матрицы S размера mxn с пространством для размещения nzmax ненулевых элементов. Затем матрица может быть заполнена по столбцам;
  • spalloc(m,n,nzmax) – эквивалентна функции sparse([ ],[ ],[ ],m,n,nzmax).

Пример:

>> S = spalloc(5.4.5);
  • spfun – вычисление функции для ненулевых элементов. Функция spfun применяется выборочно только к ненулевым элементам разреженной матрицы, сохраняя при этом разреженность исходной матрицы;
  • f = spfun(@function,S) – вычисляет function(S) для ненулевых элементов матрицы S. Имя function – это имя m-файла или встроенной в ядро функции .function должна работать с матричным аргументом S и вычислить функцию для каждого элемента матрицы S.

Пример:

>> S=spfun(@exp.sprand(4.5.0.4))
S=
(2.2) 1.6864
(2.3) 2.4112
(3.3) 2.6638
(2.4) 1.1888
(3.4) 1.3119
(4.4) 2.4007
(3.5) 1.2870
  • R = spones(S) – генерирует матрицу R той же разреженности, что и S, но заменяет на 1 все ненулевые элементы исходной матрицы.

Пример:

>> S=sprand(3.2.0.3)
S=
(3.1) 0.2987
(1.2) 0.1991
>> spones(S)
ans =
(3.1) 1
(1.2) 1
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.