Sie haben bereits viele richtige Beobachtungen gemacht!
Wenn Sie nicht beide Zufallsgeneratoren setzen möchten, ist es auf lange Sicht wahrscheinlich einfacher, den einen oder anderen Generator auszuwählen. Wenn Sie jedoch beide verwenden müssen, müssen Sie beide auch setzen, da sie unabhängig voneinander Zufallszahlen generieren.
Für numpy.random.seed()
die Hauptschwierigkeit ist, dass es nicht Thread-sicher ist - das heißt, es ist nicht sicher zu verwenden , wenn Sie viele verschiedene Ausführungs - Threads , weil es an der Arbeit nicht gewährleistet ist , wenn zwei verschiedene Threads die Funktion zur gleichen Zeit ausgeführt werden . Wenn Sie keine Threads verwenden und vernünftigerweise erwarten können, dass Sie Ihr Programm in Zukunft nicht mehr auf diese Weise neu schreiben müssen, numpy.random.seed()
sollte dies in Ordnung sein. Wenn Grund zu der Annahme besteht, dass Sie in Zukunft möglicherweise Threads benötigen, ist es auf lange Sicht viel sicherer, die vorgeschlagenen Schritte auszuführen und eine lokale Instanz der numpy.random.Random
Klasse zu erstellen . Soweit ich das beurteilen kann, random.random.seed()
ist es threadsicher (oder zumindest habe ich keine gegenteiligen Beweise gefunden).
Die numpy.random
Bibliothek enthält einige zusätzliche Wahrscheinlichkeitsverteilungen, die üblicherweise in der wissenschaftlichen Forschung verwendet werden, sowie einige praktische Funktionen zum Generieren von Arrays zufälliger Daten. Die random.random
Bibliothek ist etwas leichter und sollte in Ordnung sein, wenn Sie keine wissenschaftliche Forschung oder andere Arbeiten in der Statistik betreiben.
Andernfalls verwenden beide die Mersenne-Twister-Sequenz , um ihre Zufallszahlen zu generieren, und sie sind beide vollständig deterministisch. Wenn Sie also einige wichtige Informationen kennen, können Sie mit absoluter Sicherheit vorhersagen, welche Zahl als nächstes kommt . Aus diesem Grund ist weder numpy.random noch random.random für ernsthafte kryptografische Zwecke geeignet . Da die Sequenz jedoch sehr lang ist, eignen sich beide gut zum Generieren von Zufallszahlen, wenn Sie sich keine Sorgen über Personen machen, die versuchen, Ihre Daten rückzuentwickeln. Dies ist auch der Grund für die Notwendigkeit, den Zufallswert zu setzen - wenn Sie jedes Mal an derselben Stelle beginnen, erhalten Sie immer die gleiche Folge von Zufallszahlen!
Als Randbemerkung, wenn Sie keine Verschlüsselungs Ebene Zufälligkeit benötigen, sollten Sie die Verwendung Geheimnisse Modul, oder so etwas wie Crypto.Random , wenn Sie eine Python - Version früher als Python 3.6 verwenden.
random.random
allein verfügbar sind . Normalerweise brauchen Sie das aber nicht.