И другие программы этой серии
Команда spconvert может быть использована только после того, как матрица D загружена, или из MAT-файла, или из ASCII-файла при помощи команды load.
load mydata.dat
A = spconvert(mydata);
240
Типы данных – массивы специального вида
Разреженные матрицы
241
5.1.4. Работа с ненулевыми элементами разреженных матриц
Поскольку разреженные матрицы содержат ненулевые элементы, то предусмотрен ряд функций для работы с ними:
• nnz(X) возвращает число ненулевых элементов матрицы X. Плотность разреженной матрицы определяется по формуле nnz(X)/numel(X). Пример:
h = sparse(hilb(10)); >> nnz(h) ans = 100
• nonzeros(A) возвращает полный вектор-столбец ненулевых элементов матрицы A, выбирая их последовательно по столбцам. Эта функция дает только выход s, но не значения i и j из аналогичного выражения [i,j,s]=find(A). Вообще, length(s)=nnz(A)≤nzmax(A)≤prod (size(A)). Пример:
>> g=nonzeros(sparse(hankel([1,2,8]))) g =
1
2
8
2
8
8
• 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 размера m×n с пространством для размещения nzmax ненулевых элементов. Затем матрица может быть заполнена по столбцам;
• spalloc(m,n,nzmax) эквивалентна функции sparse([ ],[ ], [ ],m,n,nzmax); Пример: >> S = spalloc(5,4,5);
• spfun – вычисление функции для ненулевых элементов. Функция spfun применяется выборочно только к ненулевым элементам разреженной матрицы, сохраняя при этом разреженность исходной матрицы.
• f = spfun(@function,S) вычисляет function(S) для ненулевых элементов матрицы S.
Начало в части 1