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é.
Étant donné que ces histoires dépendent de la version, je quitterai la version au moment de la rédaction de cet article.
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)
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?)
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
Recommended Posts