# How to find the median of nonzero elements in each row of sparse matrix

5 views (last 30 days)

Show older comments

Hi, everyone

I have been harassed for a long time, any help will be greatly appreciated. I am looking for a computationally cheap way to find the median of nonzero elements in each row of a sparse matrix S=sparse([],[],[],32768,240,000,50*240000); There are nonzero elements assigned to S, which is not shown here.

Here is how I do to find the median, but I am not satisfied with the efficiency

[row,col,v] = find(S);

M=sum(S~=0,2);

temp1=[row,col,v];

temp2=find(M);

temp3=zeros(size(temp2));

for j=1:length(temp2)

temp3(j)=median(temp1(temp1(:,1)==temp2(j),3));

end

Also, it's much worse to replace zero with NaN, then use nanmedian or median(___,nanflag). It's not practicable at all due to assign many NaN to a large sparse matrix.

Is there any other more efficient way to implement this? I am think about a way without using loop.

Thank you very much for any of your time and energy.

##### 1 Comment

James Tursa
on 29 Nov 2016

### Accepted Answer

Guillaume
on 29 Nov 2016

Note: I have no experience with sparse matrices.

Saying that, just looking at the beginning of your code, it's trivial to go from the first line to the median in just one more line, using accumarray. I've not tried to understand what your code is doing, but it looks convoluted.

[row, ~, v] = find(S); %find values and corresponding row number of sparse matrix

rowmedian = accumarray(row, v, [], @median);

%if you want rowmedian the same height as S, replace [] by size(S, 1)

Note that giving meaningful names to your variables would greatly help others in understand your code ... and yourself in 6 months time when you go back over it. Numbered temp variables is really unhelpfully.

##### 2 Comments

James Tursa
on 30 Nov 2016

How large are m and n? (P.S. It would be best if you opened up a new Question for this)

### More Answers (0)

### See Also

### Community Treasure Hunt

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

Start Hunting!