Keeping k largest values in each column of a sparse matrix

2 visualizzazioni (ultimi 30 giorni)
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.

Risposta accettata

Andrei Bobrov
Andrei Bobrov il 19 Lug 2011
k = triu(bsxfun(@minus,dd,dd'));
pl = sum(k<0)+1==1:numel(dd);
m = dd(pl);
dd = m(cumsum(pl));
  8 Commenti

Accedi per commentare.

Più risposte (0)

Categorie

Scopri di più su Sparse Matrices in Help Center e File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by