Le rond de Python n'est pas strictement rond

fonction ronde

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)

rond numpy

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

approche

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.

Que fais tu

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

Le rond de Python n'est pas strictement rond
La liste Python n'est pas une liste
python Remarque: lorsque easy_install ne peut pas être utilisé
[Python] Erreur de nom: le nom'urlparse 'n'est pas défini
Python est facile
Qu'est-ce que python
Python est une instance
Qu'est-ce que Python
Python Pandas ne convient pas au traitement par lots
Le journal Python n'est pas sorti avec docker-compose up
python int est infini
[Python] Qu'est-ce que Pipeline ...
Erreur Python non implémentée
Python3> rond (a --b, 7)
[Python] Qu'est-ce que virtualenv
[Python] Linter pylint n'est pas installé s'affiche [VS Code]
python> vérifier NoneType ou non> si a == None:> si a vaut None:
mémo python utilisant perl - type de dictionnaire (casse non valide)
[Python] Débogage plus efficace!
Time.time () n'est-il pas très précis?
Test.py n'est pas reflété sur le serveur Web dans Python3.
TypeError: l'objet 'int' n'est pas en indice
Comment utiliser __dict__ en Python
filtre 404 introuvable dans Rollbar Python
Python est douloureux. Mais utilisez
Python est un langage pour adultes
la version de python ne change pas
[Python] Python et sécurité-① Qu'est-ce que Python?
Le cycle de publication de Python est plus rapide!
La valeur de retour de l'opération booléenne Python n'est pas toujours de type booléen
[Python] * args ** Qu'est-ce que kwrgs?
[Python] Il ne s'agit pas seulement de compter les collections.
Identité et équivalence: is et == en Python
pip install scikit-learn indique que Numerical Python (NumPy) n'est pas installé.
NameError: le nom '__ fichier__' n'est pas défini
Cours de base Python (1 Qu'est-ce que Python)
Construire un environnement Python sur Ubuntu (lorsque pip n'était pas la valeur par défaut)
[Python] Qu'est-ce qu'une fonction zip?
[Python] Qu'est-ce qu'une instruction with?
Remarque Python: à propos de la comparaison en utilisant is
ppa: jonathonf / python-3.6 est maintenant privé
Différence entre == et est en python
Utilisez le tissu tel quel en python (fabric3)
Golang vs Python - Golang est-il meilleur que Python?
La commande est introuvable dans sudo
Python est UnicodeEncodeError dans le menu fixe CodeBox
[Python] Qu'est-ce que @? (À propos des décorateurs)
Quel est le meilleur, PyPy ou Python?
[python] Quelle est la clé triée?
Python pour la déclaration ~ Qu'est-ce qui est itérable ~
Il n'y a pas de commutateur en python
[Erreur Django] L'objet 'RenameAttributes' n'est pas itérable
Erreur python d'aujourd'hui: l'image est vide
le hachage multiplicatif n'est pas parfait (certifié)
À quoi sert le trait de soulignement Python (_)?
Déterminer le système d'exploitation exécutant Python
Python> Qu'est-ce qu'une tranche étendue?
Python in est aussi un opérateur
La conversion de Sympy Laplace n'est pas pratique
N'a pas changé de Python 2 à 3