How to make sure each column in a matrix sums exactly to 1?
3 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Hello,
I would need to create a matrix of random numbers between 1 and 0, where the diagonal of the matrix is composed of zeros only and where each column sums to 1. I approximately reached the result by the following code, but some of the columns add up to slightly less than 1 (around 0.97). Why doesn't Matlab manage to normalize all of them to 1? Is there a way to solve the problem?
Here's the code:
a = [0:0.0001:1];
b(1:10000) = (0.5/10000);
F=randsrc(100,100,[a;0.5 b]);
columnSums = sum(F);
N=100;
for n=1:N
F(n,n)=0;
end
for i = 1:numel(columnSums)
F(:,i) = F(:,i)./columnSums(i);
end
Thank you! Marco
0 commentaires
Réponse acceptée
Lukas Bystricky
le 7 Août 2015
It's because you're calculating the column sums and then setting the diagonal entries to 0. If you calculate the sums after you modify the diagonal then what you wrote would work.
Plus de réponses (1)
Torsten
le 7 Août 2015
a = [0:0.0001:1];
b(1:10000) = (0.5/10000);
F=randsrc(100,100,[a;0.5 b]);
N=100;
for n=1:N
F(n,n)=0;
end
columnSums = sum(F);
for i = 1:numel(columnSums)
F(:,i) = F(:,i)./columnSums(i);
end
Best wishes
Torsten.
Voir également
Catégories
En savoir plus sur Creating and Concatenating Matrices dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!