稀疏矩阵与Matlab中A(ind,ind)= 1的全矩阵语法平行

时间:2013-07-05 21:31:02

标签: matlab sparse-matrix

在Matlab中,我可以通过执行以下操作填充完整矩阵中的所有元素组合:

A=zeros(5);
ind=[1 4 5];
A(ind,ind)=1

 A =
     1     0     0     1     1
     0     0     0     0     0
     0     0     0     0     0
     1     0     0     1     1
     1     0     0     1     1

当矩阵A稀疏时,我怎样才能实现这一目标? (比如说A=zeros(1e6)我只想要1000个元素等等......)

1 个答案:

答案 0 :(得分:1)

您可以使用sparse命令,如下所示:

% create a 5x5 sparse matrix A, with 1's at A(ind,ind)
[row,col] = meshgrid(ind,ind); % form indexing combinations
row = row(:); % rearrange matrices to column vectors
col = col(:);
A = sparse(row, col, 1, 5, 5);

虽然可能使用传统的A(1,2) = 1样式索引稀疏矩阵,但通常这不是一个好主意。 MATLAB稀疏矩阵以非常不同的方式存储在幕后的完整矩​​阵中,并且不支持这种有效的动态索引。

要获得良好的性能,应使用sparse(i,j,x,m,n)语法一次性构建稀疏矩阵。