Why the same code works for the matrix of size 5 but does not work for the matrix of size 100?
Show older comments
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
John Doe
on 12 May 2013
What is it that doesn't work? It looks good to me? Do you get an error?
Matt J
on 12 May 2013
rsv=ones(1,n)*L;
It should be more efficient to implement this as
rsv=sum(L,1);
Matt J
on 12 May 2013
It should also be more efficient to avoid the for-loops as follows
[i,j,s]=find(L);
H=sparse(i,j,1./((1-beta)*rsv(i)+ beta*rsv(j)));
Weijian
on 12 May 2013
Accepted Answer
More Answers (1)
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 Sparse 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!