1

在 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 等......)

4

1 回答 1

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)语法一次性构建稀疏矩阵。

于 2013-07-05T23:16:03.080 回答