Dies ist eine Erklärung, wie das Umfangsverhältnis mit einer dreizeiligen Funktion ermittelt wird.
** Erzwingen Sie in der Regel nicht, dass der Code komprimiert wird, sondern schreiben Sie ihn auf natürliche Weise. ** ** **
python: 3.7.3 numpy: 1.17.4
calcPi.py
import numpy as np
def calcPi(n):
points = np.random.uniform(0.0, 1.0, (n, 2))
inner = np.hypot(points[:,0], points[:,1]) < 1
return inner.mean() * 4
mean ()
.Die Methode zur Berechnung des Umfangsverhältnisses nach der Monte-Carlo-Methode selbst ist bekannt.
np.random.uniform
speichert einheitliche Zufallszahlen im Bereich von 0 bis 1 in einem Array von n Zeilen und 2 Spalten.
Jede Zeile entspricht einem Punkt in der Ebene.
Die erste Zeile
points = np.random.uniform(0.0, 1.0, (n, 2))
"""
Zum Beispiel n=Wann
[[ 0.6906296 0.20549271]
[ 0.13386813 0.77204275]
[ 0.5970941 0.49659941]
[ 0.92884413 0.37740529]
[ 0.49212498 0.13915062]
[ 0.69357975 0.23229706]
[ 0.14287715 0.14076891]
[ 0.20199753 0.49663344]
[ 0.90105166 0.87612407]
[ 0.19636323 0.39813228]]
"""
np.hypot (x, y)
stammt vom Ursprung des Punktes (x, y)
Gibt die Entfernung zurück.
points [:, 0]
ist das Array, das aus der 0. Spalte von points
extrahiert wurde, dh die Größe der x-Koordinate jedes Punkts.
points [:, 1]
ist auch die y-Koordinate jedes Punktes.
Da wir am Ende "<1" machen, ändert es sich in "Wahr", wenn der Inhalt des Arrays kleiner als 1 ist, und in "Falsch", wenn es 1 oder mehr ist. Mit anderen Worten, wenn der Abstand vom Ursprung weniger als 1 beträgt, erhalten Sie ein Array, das True ist, und wenn es mehr als 1 ist, erhalten Sie ein Array, das False ist.
2. Zeile
inner = np.hypot(points[:,0], points[:,1]) < 1
"""
Zum Beispiel n=Wenn es 10 ist,
inner == [True True True True False True False True True False]
"""
Wenn Sie die Anzahl der Punkte, deren Abstand vom Ursprung kleiner als 1 ist, durch die Gesamtzahl der Punkte dividieren, erhalten Sie einen ungefähren Wert von "π / 4". Gibt den Durchschnitt der Innereien multipliziert mit 4 zurück. (Wie Sie in [Kommentar] sehen können (https://qiita.com/POPOPON/items/c557c984a239bab21a9d#comment-4e39f41f904960d4c669), werden "True" und "False" zum Zeitpunkt der Berechnung in "1" bzw. "0" konvertiert.)
4. Zeile
return inner.mean() * 4
Dies ist das Ausführungsergebnis, wenn seed
auf 0 gesetzt ist.
print(calcPy(10)) # => 2.8
print(calcPi(100)) # => 3.32
print(calcPi(1000)) # => 3.302
print(calcPi(10000)) # => 3.1544
print(calcPi(100000)) # => 3.13228
print(calcPi(1000000)) # => 3.142204
print(calcPi(10000000)) # => 3.1421468
print(calcPi(100000000)) # => 3.14170808
das ist alles. Bitte lassen Sie mich wissen, wenn Sie Fehler haben.
Recommended Posts