Why the same code works for the matrix of size 5 but does not work for the matrix of size 100?

1 view (last 30 days)
Hi,
I have a sparse matrix L of zeros and ones and I want to change the non-zero entries to some fractions. This is my code:
beta = 0.5
n = size(L,1); %set n = dim(L)
rsv=ones(1,n)*L; %row sum vector of L
H =L;
for i=1:n
for j=1:n
if H(i,j) == 1
H(i,j)=1/((1-beta)*rsv(i)+ beta*rsv(j));
end
end
end
I found this code works for the matrix of size 5 but does not work for the matrix of size 100 (all entries stay unchanged).
Do you know why and how to change the code?
Many thanks,
Weijian
  5 Comments
Matt J
Matt J on 12 May 2013
Edited: Matt J on 12 May 2013
It is not really clear why this should have made a difference. It is equivalent to your original code, if L is type double. I can only suppose that L was logical and that my other Answer below accounts for the difference.

Sign in to comment.

Accepted Answer

Matt J
Matt J on 12 May 2013
If L has a single 1 on all columns then rsv(i)=1 for all i. If that happens then
1/((1-beta)*rsv(i)+ beta*rsv(j))
will equal 1 for all i and j.
  1 Comment
Weijian
Weijian on 12 May 2013
No, this is not the case, most of the columns have more than 1 non-zeros. But never mind, your code solves my problem. Thanks a lot.

Sign in to comment.

More Answers (1)

Matt J
Matt J on 12 May 2013
Edited: Matt J on 12 May 2013
Another possibility. If L is type logical, then creating H as H=L will make H type logical as well. This means that all assignments
H(i,j) = something_nonzero
will convert "something_nonzero" to logical 1.

Categories

Find more on Operating on Diagonal Matrices in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!