我的目标是创建一个矩形网格,并为每个点指定是/否值。我想要一个相当大的网格,所以我决定将它存储为稀疏矩阵。我的方法考虑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
重合。
答案 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