Create matrix with randomly distributed integers, with exact relative abundances
조회 수: 1 (최근 30일)
이전 댓글 표시
I want to create a matrix of randomly distributed integers between 0 and 4 (0, 1, 2, 3, or 4). However, I want the abundance of each integer to conform to a predetermined value.
So if I have a vector of abundances (e.g.):
% 0 1 2 3 4 <--corresponding random numbers
mo = [0 0.5533 0.1346 0.1167 0.1954]; % abundance of random
numbers
and I want to fill up a matrix:
P = zeros(100,100);
I can see that the abundances should be
abund = round(mo.*size(P,1).*size(P,2));
= 0 5533 1346 1167 1954
But how do I fill up the matrix P with these randomly distributed numbers? The important thing is that the abundances are exactly as predetermined.
댓글 수: 0
답변 (1개)
Thorsten
2014년 10월 14일
편집: Thorsten
2014년 10월 14일
values = [0:4];
mo = [0 0.5533 0.1346 0.1167 0.1954];
a = 100; b = 100;
% create a vector where each value appears mo(i)*a*b times
P = [];
for i = 1:numel(mo)
P = [P values(i)*ones(1, round(a*b*mo(i)))];
end
% randomize and reshape
P = P(randperm(a*b));
P = reshape(P, [a b]);
% check
hi = hist(P(:), [0:4])
댓글 수: 2
Thorsten
2014년 10월 14일
P = [];
for i = 1:numel(mo)-1
P = [P values(i)*ones(1, round(a*b*mo(i)))];
end
P(end+1:a*b) = values(end);
참고 항목
카테고리
Help Center 및 File Exchange에서 Creating and Concatenating Matrices에 대해 자세히 알아보기
제품
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!