398 Stimmen

Python: wie man erkennt, ob eine Variable ein Array oder ein Skalar ist

Ich habe eine Funktion, die das Argument NBins annimmt. Ich möchte diese Funktion mit einem Skalar 50 oder einem Array [0, 10, 20, 30] aufrufen. Wie kann ich innerhalb der Funktion identifizieren, wie lang NBins ist? Oder anders gesagt, ob es sich um einen Skalar oder einen Vektor handelt?

Ich habe es so versucht:

>>> N=[2,3,5]
>>> P = 5
>>> len(N)
3
>>> len(P)
Traceback (most recent call last):
  File "", line 1, in 
TypeError: object of type 'int' has no len()
>>> 

Wie du siehst, kann ich len nicht auf P anwenden, da es sich nicht um ein Array handelt... Gibt es in Python etwas wie isarray oder isscalar?

Danke

2voto

Vincenzooo Punkte 1716

Ich bin überrascht, dass eine so grundlegende Frage in Python nicht sofort beantwortet zu werden scheint. Es scheint mir, dass fast alle vorgeschlagenen Antworten irgendwie eine Art Typüberprüfung verwenden, die in Python normalerweise nicht empfohlen wird und die auf einen spezifischen Fall beschränkt zu sein scheinen (sie scheitern mit unterschiedlichen numerischen Typen oder generischen iterierbaren Objekten, die keine Tupel oder Listen sind).

Was für mich besser funktioniert, ist das Importieren von NumPy und die Verwendung von array.size, zum Beispiel:

>>> a=1
>>> np.array(a)
Out[1]: array(1)

>>> np.array(a).size
Out[2]: 1

>>> np.array([1,2]).size
Out[3]: 2

>>> np.array('125')
Out[4]: 1

Beachten Sie auch:

>>> len(np.array([1,2]))

Out[5]: 2

aber:

>>> len(np.array(a))
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
 in ()
----> 1 len(np.array(a))

TypeError: len() von nicht dimensioniertem Objekt

2voto

Mathieu Villion Punkte 77

Verwenden Sie einfach size anstelle von len!

>>> from numpy import size
>>> N = [2, 3, 5]
>>> size(N)
3
>>> N = array([2, 3, 5])
>>> size(N)
3
>>> P = 5
>>> size(P)
1

1voto

Nicola Punkte 81

Weil die allgemeine Richtlinie in Python lautet, um Vergebung zu bitten, anstatt um Erlaubnis zu fragen, denke ich, dass der pythonischste Weg, eine Zeichenfolge/Skalar aus einer Sequenz zu erkennen, darin besteht zu überprüfen, ob sie eine Ganzzahl enthält:

try:
    1 in a
    print('{} ist eine Sequenz'.format(a))
except TypeError:
    print('{} ist ein Skalar oder eine Zeichenfolge'.format(a))

0voto

Sumanth Meenan Punkte 1

Preds_test[0] hat die Form (128,128,1) Überprüfen wir den Datentyp mit der isinstance() Funktion isinstance benötigt 2 Argumente. Das 1. Argument ist die Daten Das 2. Argument ist der Datentyp isinstance(preds_test[0], np.ndarray) ergibt als Ausgabe True. Das bedeutet, preds_test[0] ist ein Array.

0voto

SayeMarg Punkte 11

Sie können die Funktion isinstance(object, classinfo) in Python leicht verwenden.

>>> isinstance(5, list)
False

>>>  isinstance([2, 3, 5], list)
True

Siehe die Dokumentation für diese Funktion.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X