Warum funktioniert abs()
die integrierte Funktion nicht mit Python-Listen, sondern korrekt mit NumPy-Arrays und Pandas-Serien?
Das Anwenden der integrierten abs()
Funktion auf die Python-Liste löst eine Ausnahme aus
TypeError: Ungültiger Operandentyp für abs (): 'list'
Kein Wunder, es stimmt mit der Dokumentation überein:
abs (x)
Gibt den absoluten Wert einer Zahl zurück. Das Argument kann eine Ganzzahl oder eine Gleitkommazahl sein. Wenn das Argument eine komplexe Zahl ist, wird seine Größe zurückgegeben.
Dieselbe Funktion verhält sich jedoch korrekt (als vektorisierte Funktion) für NumPy-Arrays und Pandas-Serien:
In[2]: lst = [2, 0, -1]
In[3]: # abs(lst) # bad operand type for abs(): 'list'
In[4]: import numpy as np
In[5]: arr = np.array(lst)
In[6]: abs(arr) # no problem
Out[6]: array([2, 0, 1])
In[7]: import pandas as pd
In[8]: s = pd.Series(lst)
In[9]: abs(s) # no problem
Out[9]:
0 2
1 0
2 1
dtype: int64
In[10]: abs.__class__
Out[10]: builtin_function_or_method
Wie ist es möglich?
Die zitierte Dokumentation ist veraltet.
In der neuen Dokumentation (für Python 3.8.3) heißt es:
abs (x)
Gibt den absoluten Wert einer Zahl zurück. Das Argument kann eine Ganzzahl oder eine Gleitkommazahl sein. Wenn das Argument eine komplexe Zahl ist, wird seine Größe zurückgegeben. Wenn x __abs __ () definiert, gibt abs (x) x .__ abs __ () zurück.
Der letzte Satz ist neu und erklärt die Frage:
Die NumPy- ndarray
Klasse und die Pandas- Series
Klasse definieren beide die magische __abs__()
Methode.
Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.
Bei Verstößen wenden Sie sich bitte [email protected] Löschen.
Lass mich ein paar Worte sagen