[Python] Wie man Skalar beurteilt

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.

Versionsinformation

Da diese Geschichten versionabhängig sind, werde ich die Version zum Zeitpunkt des Schreibens dieses Artikels verlassen.

Methode 1: Bestimmen Sie, ob die Number-Klasse geerbt wird

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)

Methode 2: Verwenden Sie die Entscheidungsfunktion von numpy

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?)

Skalarer Beurteilungsbereich

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

Referenz-URL

Recommended Posts

[Python] Wie man Skalar beurteilt
So installieren Sie Python
So installieren Sie Python
[Neueste Version 2020.8] So installieren Sie Python
So installieren Sie Python [Windows]
[Python] Verwendung von Liste 1
Wie benutzt man Python Argparse?
Python: Wie man pydub benutzt
[Python] Verwendung von checkio
So führen Sie Notepad ++ Python aus
So ändern Sie die Python-Version
Wie man in Python entwickelt
[Python] Verwendung von input ()
Wie benutzt man Python Lambda?
[Python] Verwendung von virtualenv
python3: Verwendung der Flasche (3)
python3: Wie man eine Flasche benutzt
Verwendung von Python-Bytes
So installieren Sie Python mit Anaconda
[Python] Wie man MP3-Daten fFT
[Python] Wie man PCA mit Python macht
Python: So verwenden Sie Async mit
[Python] Wie man nCk ableitet (ABC156-D)
So sammeln Sie Bilder in Python
Verwendung von Anfragen (Python Library)
Verwendung von SQLite in Python
[Einführung in Python] So analysieren Sie JSON
So erhalten Sie die Python-Version
[Python] Verwendung von Liste 3 Hinzugefügt
Verwendung der Python-API von OpenPose
[Python] So tauschen Sie Array-Werte aus
So verpacken Sie C in Python
Verwendung von ChemSpider in Python
Python: Verwendung von pydub (Wiedergabe)
Verwendung von PubChem mit Python
So beschleunigen Sie Python-Berechnungen
So berechnen Sie das Datum mit Python
So greifen Sie über Python auf Wikipedia zu
Verwendung der Zip-Funktion von Python
[Nanonets] Wie poste ich Memo [Python]
Umgang mit Japanisch mit Python
[Python] Verwendung der Typetalk-API
[Python] So konvertieren Sie eine Datenbankdatei in CSV
Auf Python 2.7.9 aktualisiert
[Python] Zusammenfassung der Verwendung von Pandas
So verpacken und verteilen Sie Python-Skripte
[Einführung in Python] Wie verwende ich eine Klasse in Python?
Wie man pydoc auf Python Interpreter liest
[Python] So zeigen Sie Zufallszahlen an (Zufallsmodul)
So machen Sie R chartr () in Python
Python Hinweis: Modularisierung: __name__ == Verwendung von '__ main__'
python3 So installieren Sie ein externes Modul
[Kivy] So installieren Sie Kivy unter Windows [Python]
[Python] So konvertieren Sie eine zweidimensionale Liste in eine eindimensionale Liste
So aktualisieren Sie Google Sheets von Python
So schreiben Sie Python-Dokumentkommentare (Docstrings)
[Itertools.permutations] So löschen Sie eine Sequenz in Python
[Python] Verwendung von __command__, Funktionserklärung