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