Je me demande s'il est possible de reproduire exactement toute la séquence de J'ai trouvé la valeur randn () code> de matlab avec numpy. J'ai codé ma propre routine avec Python / Numpy, et cela me donne un peu de résultats différents du code MATLAB Quelqu'un d'autre a fait et je suis en train de trouver du mal à trouver où elle vient à cause de dessins aléatoires différents. P >
numpy.random.seed code> qui produit le même numéro pour le premier tirage au sort, mais à partir du deuxième tirage au sort et sur, il est complètement différent. Je fais des tirages normaux multivariés pendant environ 20 000 fois, je ne veux donc pas simplement enregistrer les dessins Matlab et le lire en Python. P>
3 Réponses :
Si vous définissez le générateur de nombres aléatoires sur la même graine, il créera théoriquement les mêmes numéros, c'est-à-dire dans MATLAB. Je ne suis pas tout à fait sûr de la meilleure façon de le faire, mais cela semble fonctionner, dans Matlab faire:
np.random.seed(5489)
Merci beaucoup pour votre réponse. Je vais certainement l'essayer.
Je voulais juste préciser davantage à l'aide de la méthode Twister / Semise: MATLAB et NUMPLY génèrent la même séquence en utilisant ce semoir mais les remplira dans des matrices différemment.
MATLAB: P> import numpy as np
np.random.seed(1337)
A = np.random.random((5,3))
A.T
array([[ 0.26202468, 0.45931689, 0.26194293, 0.11527423, 0.12505793],
[ 0.15868397, 0.32100054, 0.97608528, 0.38627507, 0.98354861],
[ 0.27812652, 0.51839282, 0.73281455, 0.62850118, 0.44322487]])
L'utilisateur a demandé s'il était possible de reproduire la sortie de Randn () de Matlab, pas de rand. Je n'ai pas pu définir l'algorithme ou la graine pour reproduire le nombre exact pour Randn (), mais la solution ci-dessous fonctionne pour moi.
dans MATLAB: Générez vos nombres aléatoires distribués normaux comme suit: P>
import numpy as np from scipy.stats import norm np.random.seed(1) norm.ppf(np.random.rand(1,5)) array([[-0.2095, 0.5838, -3.6849, -0.5177,-1.0504]])
Quel est le problème avec
numpy.random.randn (...) code>? Il devrait faire exactement ce dont vous avez besoin, à moins que vous ne vous inquiéties de générer exactement i> la même séquence de nombres avec une graine donnée ... (NEWMIND, évidemment c'est ce que vous essayez de faire, maintenant que J'ai relu la question. Sortie de la vague curiosité, pourquoi avez-vous besoin de la séquence exacte pour être la même?)
Que voulez-vous dire "Code MATLAB Quelqu'un d'autre a fait"?
Randn code> est une fonction standard MATLAB. J'espère sincèrement que vous n'utilisez pas une fonction «personnalisée» de la corbeille de la corbeille qui est FEX.
Rien de mal à cela, j'ai besoin de générer exactement la même séquence de nombres avec une graine donnée. Comme je l'ai dit, ma routine avec numpy me donne un résultat différent d'un code MATLAB et je ne peux pas le déboguer en raison de la différence de nombres aléatoires. Je ne peux pas identifier où ça s'est mal passé.
@Nict t bien sûr pas. Je gère un modèle bayésien et mon code me donne des estimations différentes du code MATLAB. Je suis sûr que le code MATLAB est correct, alors j'essaie de déboguer mon code, mais à cause de dessins aléatoires différents, je ne peux pas identifier où les calculs diffèrent.
Ne répond toujours pas à votre question, mais économiser / charger n'est pas que i> mauvais. Scipey a un traducteur de fichier
.mat code>. Pour que vous puissiez jeter votre espace de travail MATLAB dans un fichier et l'amener facilement facilement avec Scipy.IO.Mio SCIPY.ORG/DOC/API_DOCS/SCIPY.IO.MIO.HTML
Oui, je suppose que je dois le faire. Pour tout résultat, j'ai besoin d'environ 10 000 000 tirages, mais je suppose que pour le test, je peux simplement économiser de petites attractions et pourra voir où le calcul diffère. Merci!
Heureux de signaler que j'ai réussi à reproduire les résultats. A fini par sauver / charger 100 milks mil. Merci.