[python] Comment juger scalaire

Lorsque vous voulez juger facilement si l'argument d'entrée est scalaire, il existe une fonction appelée isscalar dans matlab, mais en python Je ne savais pas quoi faire, alors j'ai cherché.

information sur la version

Étant donné que ces histoires dépendent de la version, je quitterai la version au moment de la rédaction de cet article.

Méthode 1: déterminer s'il hérite de la classe Number

Quand je lis, ça dit quelque chose comme ça.

class numbers.Number La racine de la hiérarchie des nombres. Si vous voulez juste vérifier que l'argument x est un nombre de n'importe quel type, vous pouvez utiliser isinstance (x, Number).

Le code ressemble à ceci. Cela peut être simple.

import numbers

def is_scalar(x):
    return isinstance(x, numbers.Number)

Méthode 2: utiliser la fonction de décision de numpy

Quand je l'ai recherché, il y avait une fonction appelée numpy.isscalar dans numpy. Les spécifications sont faciles à consulter par ici.

La définition sur le code source était ici. En ce qui concerne le code, la plage de jugement en tant que scalaire est nettement plus large que celle de la méthode 1. En ce qui concerne le commentaire de la fonction, c'est une spécification selon laquelle str est également un scalaire (je me sens personnellement un peu étrange. Puis-je créer un espace vectoriel où str est un coefficient?)

Plage de jugement scalaire

Je l'ai essayé avec un objet qui semble être souvent utilisé, je vais donc le poster pour le moment. Dans les essais, si «str» et «bytes» étaient la méthode 1, elle était False, et si la méthode 2 (numpy.isscalar) était vraie, les résultats du jugement étaient les mêmes. Il semble préférable d'être conscient de cette différence lors de la mise en œuvre.

scalar_test.py


import numpy
import numbers
import decimal

def is_scalar(x):
    return isinstance(x, numbers.Number)

def check(input_var):
    print("=========================")
    print(input_var)
    print(type(input_var))
    print("is_sclar_1: " + str(is_scalar(input_var)))
    print("is_sclar_2: " + str(numpy.isscalar(input_var)))

if __name__ == "__main__":
    #Jugement que les deux méthodes 1 et 2 sont scalaires
    var_int = 1
    var_bool = True
    var_float = 1.0
    var_complex = 1 + 1j
    var_npint32 = numpy.int32(1)
    var_decimal = decimal.Decimal('12.345')

    #La méthode 1 est jugée scalaire et la méthode 2 est jugée non scalaire
    var_bytes_1 = bytes(1)
    var_bytes_hoge = b'hoge'
    var_str1 = "1"
    var_str4 = "hoge"

    #Jugement que les deux méthodes 1 et 2 ne sont pas scalaires
    var_nan = None
    var_nparray = numpy.array(1)
    var_list = [1]
    var_taple = (1,2)  #(1)Si c'est le cas, ce ne sera pas taple, donc il sera jugé comme scalaire
    var_dict = {"a": 1}
    var_set = {1}

    #Vérification
    check(var_int)
    check(var_bool)
    check(var_float)
    check(var_complex)
    check(var_npint32)
    check(var_decimal)

    check(var_bytes_1)
    check(var_bytes_hoge)
    check(var_str1)
    check(var_str4)

    check(var_nan)
    check(var_nparray)
    check(var_list)
    check(var_taple)
    check(var_dict)
    check(var_set)

Résultat de sortie

=========================
1
<class 'int'>
is_sclar_1: True
is_sclar_2: True
=========================
True
<class 'bool'>
is_sclar_1: True
is_sclar_2: True
=========================
1.0
<class 'float'>
is_sclar_1: True
is_sclar_2: True
=========================
(1+1j)
<class 'complex'>
is_sclar_1: True
is_sclar_2: True
=========================
1
<class 'numpy.int32'>
is_sclar_1: True
is_sclar_2: True
=========================
12.345
<class 'decimal.Decimal'>
is_sclar_1: True
is_sclar_2: True
=========================
b'\x00'
<class 'bytes'>
is_sclar_1: False
is_sclar_2: True
=========================
b'hoge'
<class 'bytes'>
is_sclar_1: False
is_sclar_2: True
=========================
1
<class 'str'>
is_sclar_1: False
is_sclar_2: True
=========================
hoge
<class 'str'>
is_sclar_1: False
is_sclar_2: True
=========================
None
<class 'NoneType'>
is_sclar_1: False
is_sclar_2: False
=========================
1
<class 'numpy.ndarray'>
is_sclar_1: False
is_sclar_2: False
=========================
[1]
<class 'list'>
is_sclar_1: False
is_sclar_2: False
=========================
(1, 2)
<class 'tuple'>
is_sclar_1: False
is_sclar_2: False
=========================
{'a': 1}
<class 'dict'>
is_sclar_1: False
is_sclar_2: False
=========================
{1}
<class 'set'>
is_sclar_1: False
is_sclar_2: False

URL de référence

Recommended Posts

[python] Comment juger scalaire
Comment installer Python
Comment installer python
[2020.8 dernière] Comment installer Python
Comment installer Python [Windows]
[Python] Comment utiliser la liste 1
Comment utiliser Python Argparse
Python: comment utiliser pydub
[Python] Comment utiliser checkio
Comment exécuter Notepad ++ Python
Comment changer la version de Python
Comment développer en Python
[Python] Comment utiliser input ()
Comment utiliser Python lambda
[Python] Comment utiliser virtualenv
python3: Comment utiliser la bouteille (3)
python3: Comment utiliser la bouteille
Comment utiliser les octets Python
Comment installer Python à l'aide d'Anaconda
[Python] Comment FFT des données mp3
[Python] Comment faire PCA avec Python
Python: comment utiliser async avec
[Python] Comment dériver nCk (ABC156-D)
Comment collecter des images en Python
Comment utiliser les requêtes (bibliothèque Python)
Comment utiliser SQLite en Python
[Introduction à Python] Comment analyser JSON
Comment obtenir la version Python
[Python] Comment utiliser la liste 3 Ajouté
Comment utiliser l'API Python d'OpenPose
[Python] Comment permuter les valeurs de tableau
Comment envelopper C en Python
Comment utiliser ChemSpider en Python
Python: Comment utiliser pydub (lecture)
Comment utiliser PubChem avec Python
Comment accélérer les calculs Python
Comment calculer la date avec python
Comment accéder à wikipedia depuis python
Comment utiliser la fonction zip de python
[Nanonets] Comment publier un mémo [Python]
Comment gérer le japonais avec Python
[Python] Comment utiliser l'API Typetalk
[Python] Comment convertir un fichier db en csv
Mis à jour vers Python 2.7.9
[Python] Résumé de l'utilisation des pandas
Comment empaqueter et distribuer des scripts Python
[Introduction à Python] Comment utiliser la classe en Python?
Comment lire pydoc sur l'interpréteur python
[Python] Comment afficher des nombres aléatoires (module aléatoire)
Comment faire R chartr () en Python
python Remarque: Modularisation: __name__ == Comment utiliser '__ main__'
python3 Comment installer un module externe
[Kivy] Comment installer Kivy sur Windows [Python]
[Python] Comment convertir une liste bidimensionnelle en liste unidimensionnelle
Comment mettre à jour Google Sheets à partir de Python
Comment écrire des commentaires de document Python (Docstrings)
[Itertools.permutations] Comment créer une séquence en Python
[python] Comment utiliser __command__, explication des fonctions