Ich denke, ich würde die Rundungsfunktion verwenden, wenn ich eine Zahl mit einem Bruch in eine Ganzzahl umwandeln wollte, aber dies ist keine reine Rundungsfunktion. Insbesondere ist es wie folgt.
>>> round(3.5) #Ich möchte, dass du 4 bist
4 #Werden Sie 4
>>> round(2.5) #Ich möchte, dass du 3 bist
2 #Werden Sie 2(<-??)
>>> round(2.50000001) #Ich möchte, dass du 3 bist
3 #Werden Sie 3
Dies wird auch in der offiziellen Dokumentation (https://docs.python.org/ja/3/library/functions.html?highlight=round#round) auf (gerade) +0,5 beim Runden auf eine Ganzzahl erwähnt. Wenn dies der Fall ist, wird es nicht aufgerundet, sondern abgerundet. Dies liegt an der Natur des Bankrundungsalgorithmus, und wenn auf eine ganze Zahl gerundet wird, scheinen sich die anderen Fälle nicht zu ändern. (Korrigiert, nachdem @shiracamus am 05.09.2020 um 12:21 Uhr darauf hingewiesen hat)
Wenn die integrierte Funktionsrunde nicht gut ist, sollten Sie die Numpy-Runde verwenden, aber die Numpy-Runde liefert das gleiche Ergebnis. Dies ist auch in der offiziellen Dokumentation geschrieben.
>>> import numpy as np
>>> np.round(3.5) #Ich möchte, dass du 4 bist
4.0 #Werden Sie 4
>>> np.round(2.5) #Ich möchte, dass du 3 bist
2.0 #Werden Sie 2
Es gibt kein Problem, da Sie die if-Anweisung verwenden können, um die Runde mit einer Zahl zu multiplizieren. Wenn Sie jedoch die for-Anweisung für das ndarray von numpy und eine nach der anderen drehen, wird der Code redundant. Wenn Sie Folgendes tun, werden 2.5 und 4.5 ebenfalls korrekt gerundet.
my_Definition der runden Funktion
def my_round(a:np.ndarray) -> np.ndarray:
rounded_a = np.round(a)+(((a%1)==0.5)*(a//1%2==0))
return rounded_a
Wenn ich es starte, sieht es so aus
>>> a = np.arange(-3,3,0.5)
>>>print(a)
[-3. -2.5 -2. -1.5 -1. -0.5 0. 0.5 1. 1.5 2. 2.5]
>>>print(np.round(a))
[-3. -2. -2. -2. -1. -0. 0. 0. 1. 2. 2. 2.]
>>>print(my_round(a))
[-3. -2. -2. -1. -1. 0. 0. 1. 1. 2. 2. 3.]
Sie können sehen, dass es richtig gerollt ist.
Was "((a% 1) == 0,5) * (a // 1% 2 == 0)" tut, ist "(a% 1) == 0,5" in Form von "* .5" Indem Sie ein Array erstellen, in dem 1 nur dort steht, wo es ist, und indem Sie ein Array erstellen, in dem 1 nur dort steht, wo der ganzzahlige Teil gerade mit "a // 1% 2 == 0" ist, und diese multiplizieren Gerade). Es ist eine einfache Möglichkeit, 1 nur dort hinzuzufügen, wo es 5 ist. Diese Methode verwendet keine for-Anweisung (die in Python als langsam bezeichnet wird), daher wird erwartet, dass sie etwas schneller ist als die direkte Ausführung mit for.
Recommended Posts