2012-11-18 6 views
1

Je souhaite créer un générateur de probabilités qui sélectionne une certaine quantité d'options, en fonction de probabilités antérieures. Par exemple, dire que je veux choisir au hasard entre A, B et C, sur la base des probabilités a priori suivantes:Génération de probabilités dans Matlab

P(A) = .4 
P(B) = .5 
P(C) = .1 

Alors, comment puis-je créer un générateur aléatoire, qui va générer au hasard et A, B , ou C, basé sur les probabilités ci-dessus?

EDIT: Désolé, j'ai oublié d'ajouter que le nombre d'éléments, et leurs probabilités ne seront pas toujours les mêmes. Donc, ce ne sera pas toujours juste trois éléments comme ci-dessus. Il sera une matrice de Mx2, où M est le nombre d'éléments, et la somme de la deuxième colonne (les probabilités) est 1.

+1

Pourquoi ne pas générer un nombre aléatoire entre 0 et 1, puis le convertir en votre désir ed classe? – slayton

+0

Merci, et désolé je n'ai pas fait ma question très claire. S'il vous plaît regardez la version éditée. – Kvothe

Répondre

0

Si P est un vecteur de probabilités de longueur N, vous pouvez retourner un échantillon de celui-ci avec une seule ligne de code:

out = 1 + sum(rand() > cumsum(P)); 

qui renverra un nombre entier de 1 à N en fonction des probabilités de P.

+0

Merci, cela fonctionne et c'est une ligne de code. – Kvothe

1
p=rand; 
probs_vector=[.4 .5 .1]; 
current_prob=probs_vector(1); 
index=1; 
while (current_prob<p) 
    index=index+1; 
    current_prob=current_prob+probs_vector(index) 
end 

devrait faire quelques vérifications de base pour assurer le vecteur ajoute jusqu'à 1 et pas plus haut/plus bas, pour empêcher une boucle infinie, etc., mais je vous laisserai ces détails. index est la sortie.

+0

Merci. Maintenant, comment faire la même chose où je ne connais pas le nombre de variables? Désolé, je n'avais pas précisé ma question. Je l'ai édité. – Kvothe

+0

@Kvothe: Essayez ma réponse maintenant. – PearsonArtPhoto

+0

Merci, je vais essayer ceci pour voir si cela fonctionne. – Kvothe

3

Je suis confus, mais ce que vous voulez dire que M, mais voici mon avis sur si P est la matrice de probabilité:

cumP = cumsum (P); 
ind = find(cumP>rand, 1, 'first'); 
sol = P(ind); 
+0

Merci, je vais essayer ceci pour voir si cela fonctionne. – Kvothe

Questions connexes