Keeping k largest values in each column of a sparse matrix

2 ビュー (過去 30 日間)
Wolfgang Schwanghart
Wolfgang Schwanghart 2011 年 7 月 3 日
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.
  1 件のコメント
Wolfgang Schwanghart
Wolfgang Schwanghart 2011 年 7 月 19 日
since nobody answered, I'll just give it another try...

サインインしてコメントする。

採用された回答

Andrei Bobrov
Andrei Bobrov 2011 年 7 月 19 日
k = triu(bsxfun(@minus,dd,dd'));
pl = sum(k<0)+1==1:numel(dd);
m = dd(pl);
dd = m(cumsum(pl));
  8 件のコメント
Sean de Wolski
Sean de Wolski 2011 年 7 月 19 日
That is nice Andrei!
Andrei Bobrov
Andrei Bobrov 2011 年 7 月 19 日
Thanks, friends!

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeSparse Matrices についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by