, . , :
%
N = 5000; %
L = rand(1,N) > 0.95; %
M = sum(L);
rr = rand(M); %
%
%
zz1 = sparse(N,N);
tic
zz1(L,L) = rr;
toc
%
zz2 = sparse(N,N);
inds = zz1~=0;
tic
zz2(inds) = rr;
toc
%
zz3 = sparse(N,N);
inds = find(inds);
tic
zz3(inds) = rr;
toc
%
zz4 = spalloc(N,N, M*M);
tic
zz4(inds) = rr;
toc
:
Elapsed time is 3.988558 seconds. %
Elapsed time is 3.916462 seconds. %
Elapsed time is 4.003222 seconds. %
Elapsed time is 0.139986 seconds. %
, ( ), , MATLAB ( ), / . , "" MATLAB:
%
zz1 = sparse(N,N);
%
%
%
rr = rand(M); %
%
tic
[i,j] = find(zz1); %
[m,n] = size(zz1); %
zz1 = sparse(i,j,nonzeros(zz1), m,n, M*M);
zz1(L,L) = rr; %
toc
( N, L rr):
Elapsed time is 0.034950 seconds. %
. + .