Wenn Sie leicht feststellen möchten, ob das Eingabeargument skalar ist, gibt es in matlab eine Funktion namens isscalar, in Python jedoch Ich wusste nicht, was ich tun sollte, also habe ich nachgeschlagen.
Da diese Geschichten versionabhängig sind, werde ich die Version zum Zeitpunkt des Schreibens dieses Artikels verlassen.
Wenn ich lese, steht so etwas.
class numbers.Number Die Wurzel der Zahlenhierarchie. Wenn Sie nur überprüfen möchten, ob das Argument x eine beliebige Zahl ist, können Sie isinstance (x, Number) verwenden.
Der Code sieht so aus. Es kann einfach sein.
import numbers
def is_scalar(x):
return isinstance(x, numbers.Number)
Als ich nachgeschlagen habe, gab es in numpy eine Funktion namens "numpy.isscalar". Die Spezifikationen sind [hier] leicht zu sehen (https://docs.scipy.org/doc/numpy/reference/generated/numpy.isscalar.html).
Die Definition im Quellcode war hier. In Bezug auf den Code ist der Bereich der Beurteilung als Skalar definitiv größer als der von Methode 1. In Bezug auf die Funktionskommentare sind die Spezifikationen so, dass str auch ein Skalar ist (ich persönlich fühle mich etwas seltsam. Kann ich einen Vektorraum erstellen, in dem str ein Koeffizient ist?)
Ich habe es mit einem Objekt versucht, das anscheinend oft verwendet wird, daher werde ich es vorerst veröffentlichen. Wenn in den Versuchen "str" und "bytes" Methode 1 waren, war es falsch, und wenn Methode 2 (numpy.isscalar) wahr war, waren die Beurteilungsergebnisse dieselben. Es scheint besser, sich dieses Unterschieds bei der Implementierung bewusst zu sein.
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__":
#Beurteilung, dass beide Methoden 1 und 2 skalar sind
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')
#Methode 1 wird als skalar und Methode 2 als nicht skalar beurteilt
var_bytes_1 = bytes(1)
var_bytes_hoge = b'hoge'
var_str1 = "1"
var_str4 = "hoge"
#Beurteilung, dass beide Methoden 1 und 2 nicht skalar sind
var_nan = None
var_nparray = numpy.array(1)
var_list = [1]
var_taple = (1,2) #(1)Wenn ja, wird es kein Taple sein, also wird es als skalar beurteilt
var_dict = {"a": 1}
var_set = {1}
#Überprüfung
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)
Ausgabeergebnis
=========================
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