Keeping k largest values in each column of a sparse matrix

2 Ansichten (letzte 30 Tage)
Hi everyone,
I am trying to implement an algorithm that involves a pruning of a large sparse matrix. The pruning scheme should keep the k largest values (all nonzero values are positive) in each column of the sparse matrix M.
My current solution is:
function Mp = pruning(M,k)
[i,j,v] = find(M);
t = sortrows([i j v],[2 -3]);
dzero = cumsum([0;diff(t(:,2))]==0);
dz = [1;diff(t(:,2))]>0;
dd = dzero.*dz;
for r = 2:numel(dd);
dd(r) = max(dd([r-1 r]));
end;
I = (dzero-dd+1) <= k;
Mp = sparse(t(I,1),t(I,2),t(I,3),size(M,1),size(M,2));
Do you have better solutions (that avoid the loop)?
Thanks, W.

Akzeptierte Antwort

Andrei Bobrov
Andrei Bobrov am 19 Jul. 2011
k = triu(bsxfun(@minus,dd,dd'));
pl = sum(k<0)+1==1:numel(dd);
m = dd(pl);
dd = m(cumsum(pl));
  8 Kommentare

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu Sparse Matrices finden Sie in Help Center und File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by