Je recherche un moyen simple d'échantillonner à partir d'une distribution multivariée de von Mises-Fisher en Python. J'ai regardé dans le module stats dans scipy et le module numpy mais j'ai seulement trouvé la distribution univariée de von Mises. Y a-t-il un code disponible? Je n'ai pas encore trouvé.
Apparemment, Wood (1994) a conçu un algorithme d'échantillonnage à partir de la distribution vMF selon ce lien , mais je ne trouve pas l'article.
- edit Pour plus de précision, je suis intéressé par l'algorithme qui est difficile à trouver dans la littérature (la plupart des articles se concentrent sur ). L'article fondateur (Wood, 1994) est introuvable à ma connaissance.
distributions
sampling
python
micro
la source
la source
scipy.stats.vonmises
peut être de type tableau, vous pouvez donc spécifier la distribution en tant quearray
. Voir cet exempleK = vonmises.pdf([x,x], kappa=[[1],[10]])
. A 2-D VMF ne devrait avoir qu'un seul réel en tant que paramètre. Êtes-vous d'accord?Réponses:
Je l'ai finalement eu. Voici ma réponse.
J'ai enfin mis la main sur les statistiques directionnelles (Mardia et Jupp, 1999) et sur l'algorithme d'échantillonnage d'Ulrich-Wood. Je poste ici ce que j'en ai compris, c'est-à-dire mon code (en Python).
Le schéma d'échantillonnage de rejet:
Et, pour un échantillonnage efficace avec ce code, voici un exemple:
la source
(Je m'excuse pour la mise en forme ici, j'ai créé un compte juste pour répondre à cette question, car j'essayais également de comprendre cela récemment).
La réponse du micro n'est pas tout à fait juste, le vecteurv doit venir de Sp - 2 dans l'espace tangent à μ , C'est, v devrait être un vecteur unitaire orthogonal à μ . Sinon, le vecteurv 1 - w2------√+ w μ n'aura pas de norme un. Vous pouvez le voir dans l'exemple fourni par mic. Pour résoudre ce problème, utilisez quelque chose comme:
et remplacer
dans l'exemple du micro avec un appel à
la source