И другие программы этой серии
Вместо X можно вставить (X, операция отношения, параметр), и тогда индексы и вектор-столбец будут отражать элементы матрицы, удовлетворяющие данному отношению. Единственное исключение find(x ~= 0). Индексы те же, что и при исполнении find(X), но вектор v содержит только единицы. Пример:
>> q=sprand(3,4,0.6) q =
(1.1) 0.7266
(1.2) 0.4120
(3.2) 0.2679
(3.3) 0.4399
238
Типы данных – массивы специального вида
Разреженные матрицы
239
(2,4) 0.7446
(3,4) 0.9334
>> [i,j]=find(q) i =
1
1
3
3
2
3 j =
1
2
2
3
4
4
full(S) преобразует разреженную матрицу S в полную; если исходная матрица S была полной, то full(S) возвращает S. Пусть X – матрица размера m×n с nz=nnz(X) ненулевыми элементами. Тогда full(X) требует такой объем памяти, чтобы хранить m×n действительных чисел, в то время как sparse(X) требует пространство для хранения лишь nz действительных чисел и (n×z+n) целых чисел – индексов. Большинству компьютеров для хранения действительного числа требуется вдвое больше пространства, чем для целого. Для таких компьютеров sparse(X) требует меньше пространства, чем full(X), если плотность nnz/prod(size(X))<2/3. Выполнение операций над разреженными матрицами, однако, требует больше затрат времени, чем над полными, поэтому для эффективной работы с разреженными матрицами плотность расположения ненулевых элементов должна быть много меньше 2/3.
Примеры:
>> q=sprand(3,4,0.6)
q =
(1,1)
0.0129
(1,2)
0.3840
(2,2)
0.6831
(3,3)
0.0928
>> d=full(q)
d =
0.0129
0.3840
0
0.6831
0
0
0
0
0.0928
S=sparse(A) преобразует полную матрицу в разреженную, удаляя нулевые элементы. Если матрица S уже разреженная, то sparse(S) возвращает S. Функция sparse – это встроенная функция, которая формирует матри-
цы в соответствии с правилами записи разреженных матриц, принятыми в системе MATLAB;
• S=sparse(i,j,s,m,n,nzmax) использует векторы i, j и s для того, чтобы генерировать разреженную матрицу размера m×n с ненулевыми элементами, количество которых не превышает nzmax.
Начало в части 1