Ältere Kommentare anzeigen
Hi considering I want to make a a 3x6624 matrix of random numbers (>0 and <1) but I want the sum of each column of the3 numbers to add up to 1. Any help?
Thanks
Akzeptierte Antwort
Weitere Antworten (3)
Mate 2u
am 9 Mai 2011
0 Stimmen
Sean de Wolski
am 9 Mai 2011
A = rand(3,6624);
A = bsxfun(@rdivide,A,sum(A,1));
Also look at Roger's randfixedsum on the FEX.
Teja Muppirala
am 9 Mai 2011
Paulo's algorithm without a loop:
a=zeros(3,6624);
a(1:2,:)=rand(2,6624)/3;
a(3,:)=1-sum(a);
P = randperm(6624*3);
[~,ord] = sort(ceil(P/3));
a(:) = a(P(ord));
figure
hist(a',.05:.1:.95);
Another possible algorithm:
a=zeros(3,6624);
a(1,:) = rand(1,6624);
a(2,:) = (1-sum(a)).*rand(1,6624);
a(3,:) = (1-sum(a)).*rand(1,6624);
a = bsxfun(@rdivide,a,sum(a));
P = randperm(6624*3);
[~,ord] = sort(ceil(P/3));
a(:) = a(P(ord));
figure
hist(a',.05:.1:.95);
Kategorien
Mehr zu Creating and Concatenating Matrices finden Sie in Hilfe-Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!