create array
1 visualizzazione (ultimi 30 giorni)
Mostra commenti meno recenti
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
0 Commenti
Risposta accettata
Paulo Silva
il 9 Mag 2011
a=zeros(3,6624);
for b=1:size(a,2)
c(1)=rand/3;
c(2)=rand/3;
c(3)=1-c(1)-c(2);
cr=randperm(3);
a(:,b)=[c(cr(1));c(cr(2));c(cr(3))];
end
Più risposte (3)
Sean de Wolski
il 9 Mag 2011
A = rand(3,6624);
A = bsxfun(@rdivide,A,sum(A,1));
Also look at Roger's randfixedsum on the FEX.
0 Commenti
Teja Muppirala
il 9 Mag 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);
0 Commenti
Vedere anche
Categorie
Scopri di più su Creating and Concatenating Matrices in Help Center e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!