有效创建逻辑稀疏矩阵

时间:2016-02-02 12:27:20

标签: matlab sparse-matrix

我的目标是创建一个矩形网格,并为每个点指定是/否值。我想要一个相当大的网格,所以我决定将它存储为稀疏矩阵。我的方法考虑N x N网格,只有r点的比例为真(所以Nact = r*N^2点):

N = 200;
r = 0.25;
NAct = r*N^2;
ss = spalloc(ceil(N),ceil(N),ceil(NAct));
for j = 1:N, for i = 1:N, ss(i,j) = rand < r; end; end;
ssL = logical(ss);

然而,这似乎对大型N无效。

我也试过这个:

N = 200;
r = 0.25;
NAct = r*N^2;
iAct = randi(N,1,N);
jAct = randi(N,1,N);
sssL = sparse(iAct,jAct,true,ceil(N),ceil(N),ceil(NAct));
nnz(sssL)

作为替代方案,但我有两个问题:true点是N而不是NAct,如果iAct的两对元素存在错误和jAct重合。

2 个答案:

答案 0 :(得分:2)

我最后使用了sprand

N = 200;
r = 0.25;
NAct = r*N^2;
ss = sprand(N,N,r);
ssL = logical(ss);

答案 1 :(得分:0)

N = 200;
Grid(N,N) = false; %// preallocate grid
Grid = sparse(Grid); %// add to make sparse
r = 213;
TruePoints = randi(N^2,r,1); %// get random indices of points to be true
Grid(TruePoints) = true;
Grid = logical(Grid); %// switch to logical