당신이 하지는 통계 도구 상자이있는 경우 (그렇지 않으면 Stewie's answer 참조)는 경험적 누적 분포 함수를 도출하고 inverse sampling를 사용 bin
이 v
에 직접 매핑
% Numbers of draws
N = 1e3;
% Sample a uniform in (0, 1)
x = rand(N,1);
% Empirical cdf
ecdf = cumsum([0, v]);
% Inverse sampling/binning
[counts, bin] = histc(x,ecdf);
. 당신이 probabilitites v
와 값 y
의 일반적인 세트가 경우에 따라서, 당신이해야 :
counts(end) = []; % Discard last bucket x==1
counts./sum(counts)
:
out = y(bin);
주의 숫자로 N
증가를 그립니다, 우리는 확률의 더 나은 근사치를 얻을
함수는 다음과 같습니다.
function [x, counts] = mysample(prob, val, N)
if nargin < 2 || isempty(val), val = 1:numel(prob); end
if nargin < 3 || isempty(N), N = 1; end
[counts, bin] = histc(rand(N,1), cumsum([0, prob(:)']));
x = val(bin);
end