为什么内置函数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数列(因为它会被向量化)?的主要内容,如果未能解决你的问题,请参考以下文章

Python基础 ---Python常用的内置函数

Python内置方法/函数

python内置函数都有哪些

python内置函数

python学习之4函数式编程(廖雪峰)

Python开发第五篇内置函数