让我们考虑以下矩阵
A = [ 0 0 0 5
0 2 0 0
1 3 0 0
0 0 4 0]
A =
0 0 0 5
0 2 0 0
1 3 0 0
0 0 4 0
如果我们这样做
sparse(A)
ans =
(3,1) 1
(2,2) 2
(3,2) 3
(4,3) 4
(1,4) 5
它只显示这些元素的非零元素和索引,但是如何使用这些数据来构造新的向量或数组呢?我也想了解下面的命令
S = sparse(i,j,s,m,n)
它的定义是
i和j分别是矩阵的非零元素的行和列索引的向量。 s是非零值的向量,其索引由相应的(i,j)对指定。 m是结果矩阵的行维度,n是列维度。
但它是否有助于我们创建新数组或一般是什么是稀疏命令的想法?我知道它是存储的优化并且只采用非零元素,但我们如何在进一步计算中使用结果?提前感谢
答案 0 :(得分:3)
这只是存储问题,使用稀疏矩阵作为普通矩阵:
A = [ 0 0 0 5
0 2 0 0
1 3 0 0
0 0 4 0];
B = [ 1 6 1 5
6 2 0 0
9 3 5 9
8 7 4 0];
A = sparse(A); % Reduce memory footprint
C = B*A; % Continue thinking of matrix A as a normal matrix
D = A(:, 2); % Address elements as if A is normal matrix ...
% i.e. D = [0 2 3 0].'
语法:
S = sparse(i,j,s,m,n);
用于直接将矩阵构造为稀疏矩阵(不临时分配正常矩阵):
n = 4; % Final row count
m = 4; % Final column count
i = [3 2 3 4 1]; % Non null rows indices
j = [1 2 2 3 4]; % Non null columns indices
s = [1 2 3 4 5]; % Non null values
AA = sparse(i, j, s, n, m) % Same matrix as 'sparse(A)' without temporary allocation of full A