2014-10-20 4 views
2

N 요소가 포함 된 벡터가 있다고 가정 해 봅시다. 각각의 확률은 다음과 같습니다. 예를 들어,확률에 따라 하나의 요소를 선택하는 방법은 무엇입니까?

v = [0.01 0.01 0.09 0.82 0.07]는 그래서

입력 벡터 V 항상 정규화 등의 시간을 9 %에서의 시간이 82 %, 3에서 4를 반환하는 함수 f(v) 원하는 sum(v) = 1 즉,이 수 있도록 단순화해라.

어떻게이 확률 함수를 MATLAB에서 구현할 수 있습니까? 아니면 내장 함수가 있을까요? 당신은 통계 도구 상자가있는 경우

답변

3

당신이 하지는 통계 도구 상자이있는 경우 (그렇지 않으면 Stewie's answer 참조)는 경험적 누적 분포 함수를 도출하고 inverse sampling를 사용 binv에 직접 매핑

% 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 
4

, 당신은 randsample를 사용할 수 있습니다 v에 주어진 이것이하는 일은 확률 분포와, 벡터 1:numel(v)에서 하나 개의 임의의 숫자를 가지고

f = randsample(1:numel(v), 1, true, v) 

입니다. 여러 값을 원할 경우 두 번째 매개 변수를 원하는 난수의 수로 변경할 수 있습니다.