Vergleich von Matlab und Numpy Code, der die Zufallsgenerierung verwendet

Gibt es einen Weg, um die zufällige Anzahl Generator in numpy erzeugen die gleichen zufälligen Zahlen wie in Matlab, bei der gleichen Saatgut?

Ich habe in Matlab das folgende ausprobiert:

>> rng(1); >> randn(2, 2) ans = 0.9794 -0.5484 -0.2656 -0.0963 

Und das folgende in iPython mit Numpy:

 In [21]: import numpy as np In [22]: np.random.seed(1) In [23]: np.random.randn(2, 2) Out[23]: array([[ 1.624, -0.612], [-0.528, -1.073]]) 

Werte in beiden Arrays sind unterschiedlich.

Oder könnte jemand eine gute Idee vorschlagen, zwei Implementierungen des gleichen Algorithmus in Matlab und Python zu vergleichen, die zufällige Zahlengenerierung verwendet.

Vielen Dank!

4 Solutions collect form web for “Vergleich von Matlab und Numpy Code, der die Zufallsgenerierung verwendet”

  1. Ein Weg, um sicherzustellen, dass die gleichen Zahlen zu Ihrem Prozess gefüttert werden, ist, sie in einer der beiden languges zu erzeugen, sie zu speichern und in die andere Sprache zu importieren. Das ist ziemlich einfach, man könnte sie in eine einfache Textdatei schreiben.

  2. Wenn dies nicht möglich oder wünschenswert ist, können Sie auch sicherstellen, dass die Zahlen gleich sind, indem Sie die Erzeugung der Pseudozufallszahlen selbst machen. Hier ist eine Website, die ein sehr einfaches Beispiel für einen einfach zu implementierenden Algorithmus zeigt: Erstellen Sie Ihre eigenen einfachen Zufallszahlen

  3. Wenn die Qualität Ihres selbstgemachten Zufallsgenerators nicht ausreicht, können Sie eine zufällige Generierungsfunktion in einer Sprache aufbauen und von der anderen aufrufen. Der einfachste Weg ist wahrscheinlich, Matlab von Python zu nennen.

  4. Wenn Sie sich glücklich fühlen, versuchen Sie es mit den Einstellungen zu spielen. Zum Beispiel versuchen Sie mit dem (veralteten) seed Eingang zu matlabs zufälligen Funktionen. Oder versuchen Sie es mit verschiedenen Arten von Generatoren. Ich glaube, der Standard in beiden Sprachen ist mersenne twister, aber wenn diese Implementierung ist nicht die gleiche, vielleicht ein einfacher ist.

Ich wollte nur noch mit der Twister / Seeding-Methode klären: MATLAB und Numpy erzeugen dieselbe Sequenz mit dieser Seeding, werden aber in Matrizen anders ausfüllen.

MATLAB füllt eine Matrix nach unten Spalten , während Python geht Reihen . Um also die gleichen Matrizen in beiden zu bekommen, musst du umsetzen:

MATLAB:

 rand('twister', 1337); A = rand(3,5) A = Columns 1 through 2 0.262024675015582 0.459316887214567 0.158683972154466 0.321000540520167 0.278126519494360 0.518392820597537 Columns 3 through 4 0.261942925565145 0.115274226683149 0.976085284877434 0.386275068634359 0.732814552690482 0.628501179539712 Column 5 0.125057926335599 0.983548605143641 0.443224868645128 

Python:

 import numpy as np np.random.seed(1337) A = np.random.random((5,3)) AT 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]]) 

Wie Bakuriu vorschlägt, funktioniert es mit MATLABs twister:

MATLAB:

 >> rand('twister', 1337) >> rand() ans = 0.2620 

Python (Numpy):

 >>> import numpy as np >>> np.random.seed(1337) >>> np.random.random() 0.2620246750155817 

Wie wäre es mit einem Matlab-Skript, um die zufälligen Zahlen auf einem Samen, aus Ihrem Python-Code zu bekommen?

  • Schneller Weg, um einen zufälligen Index aus einer Reihe von Gewichten in Python zu erhalten
  • Implementierung eines Pseudozufallsgenerators in Python
  • Holen Sie sich eine zufällige Boolesch in Python?
  • Getrandbits erzeugt keine konstanten längenzahlen
  • Konsequent erstellen gleiche zufällige numpy Array
  • Auswahl auf der Grundlage der prozentualen Gewichtung
  • Set.pop () ist nicht zufällig?
  • Zurückrollen der Zufallszahlengenerator in Python?
  • Kennt jemand einen Weg, um die Elemente in einer Liste zu klettern?
  • Generieren zufällige Wörter
  • Wie wählen Sie "x" Anzahl der eindeutigen Zahlen aus einer Liste in Python?
  • Python ist die beste Programmiersprache der Welt.