Je pense que j'utiliserais la fonction d'arrondi lorsque je voulais transformer un nombre avec une fraction en un entier, mais ce n'est pas strictement une fonction d'arrondi. Plus précisément, c'est comme suit.
>>> round(3.5) #Je veux que tu sois 4
4 #Devenir 4
>>> round(2.5) #Je veux que tu sois 3
2 #Devenir 2(<-??)
>>> round(2.50000001) #Je veux que tu sois 3
3 #Devenir 3
Ceci est également mentionné dans la documentation officielle (https://docs.python.org/ja/3/library/functions.html?highlight=round#round), à (pair) +0,5 lors de l'arrondi à un entier. Quand c'est le cas, il n'est pas arrondi mais arrondi vers le bas. Cela est dû à la nature de l'algorithme d'arrondi bancaire, et lors de l'arrondissement à un entier, les autres cas ne semblent pas changer. (Corrigé après avoir été signalé par @shiracamus à 12h21 le 05/09/2020)
Si la fonction intégrée round n'est pas bonne, vous devez utiliser le round de numpy, mais le round de numpy donne le même résultat. Ceci est également écrit dans la Documentation officielle.
>>> import numpy as np
>>> np.round(3.5) #Je veux que tu sois 4
4.0 #Devenir 4
>>> np.round(2.5) #Je veux que tu sois 3
2.0 #Devenir 2
Il n'y a pas de problème car vous pouvez utiliser l'instruction if pour multiplier l'arrondi par un nombre, mais si vous activez l'instruction for pour le ndarray de numpy et que vous le tournez un par un, le code devient redondant. Si vous procédez comme suit, 2,5 et 4,5 seront également arrondis correctement.
my_Définition de la fonction ronde
def my_round(a:np.ndarray) -> np.ndarray:
rounded_a = np.round(a)+(((a%1)==0.5)*(a//1%2==0))
return rounded_a
Quand je le lance, ça ressemble à ça
>>> 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.]
Vous pouvez voir qu'il est roulé correctement.
Ce que ((a% 1) == 0.5) * (a // 1% 2 == 0)
fait est (a% 1) == 0.5
sous la forme de * .5
En créant un tableau où 1 se trouve seulement là où il est, et en créant un tableau où 1 se trouve seulement là où la partie entière est paire à ʻa // 1% 2 == 0` et en les multipliant, ( C'est un moyen simple d'ajouter 1 uniquement là où il est 5.
Cette méthode n'utilise pas d'instruction for (qui est dite lente en python), elle devrait donc être un peu plus rapide que de le faire directement avec for.
Recommended Posts