Работа
с ненулевыми элементами разреженных матриц
Поскольку
разреженные матрицы содержат ненулевые элементы, то предусмотрен ряд функций
для работы с ними:
-
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
Содержание раздела