为什么内置函数abs()不能用于Python列表,但却能正确地用于NumPy数组和pandas数列(因为它会被向量化)?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么内置函数abs()不能用于Python列表,但却能正确地用于NumPy数组和pandas数列(因为它会被向量化)?相关的知识,希望对你有一定的参考价值。
为什么内置函数 abs()
不要与Python列表一起工作,但与NumPy数组和pandas系列一起正确工作?
应用内置的 abs()
函数到Python list会引发异常
类型错误:abs()的操作数类型错误:'list'
没什么好奇怪的,这与文档中的内容一致。
abs(x) 返回一个数字的绝对值。参数可以是一个整数或浮点数。 如果参数是一个复数,则返回它的大小。
但同样的函数对于 NumPy 数组和 pandas 数列来说,表现正确(作为一个向量函数)。
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
这怎么可能?
答案
引用的文档已经过时了。
列表中的 新文件 (对于 Python 3.8.3) 状态。
abs(x) 返回一个数字的绝对值。参数可以是一个整数或浮点数。如果参数是一个复数,则返回它的大小。如果x定义了__abs__(),abs(x)返回x.__abs__()。
最后一句是新的,它解释了这个问题。
NumPy ndarray
阶级和大熊猫 Series
类都定义了神奇的 __abs__()
方法。
以上是关于为什么内置函数abs()不能用于Python列表,但却能正确地用于NumPy数组和pandas数列(因为它会被向量化)?的主要内容,如果未能解决你的问题,请参考以下文章