python - 为什么像 abs 这样的内置函数适用于 numpy 数组?

标签 python arrays numpy

令我感到惊讶的是 abs 适用于 numpy 数组但不适用于列表。这是为什么?

import numpy as np

abs(np.array((1,-2)))
array([1, 2])

abs([1,-1])
TypeError: bad operand type for abs(): 'list'

此外,sum 等内置函数也适用于 numpy 数组。我猜是因为numpy数组支持__getitem__?但是在 abs 的情况下,如果它依赖于 __getitem__ 它应该也适用于列表,但它没有。

最佳答案

那是因为 numpy.ndarray 实现了 __abs__(self) 方法。只需为您自己的类提供它,abs() 就会神奇地工作。对于非内置类型,您也可以在事后提供此功能。例如

class A:
    "A class without __abs__ defined"
    def __init__(self, v):
        self.v = v

def A_abs(a):
    "An 'extension' method that will be added to `A`"
    return abs(a.v)

# Make abs() work with an instance of A
A.__abs__ = A_abs

但是,这不适用于内置类型,例如 listdict

关于python - 为什么像 abs 这样的内置函数适用于 numpy 数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20953127/

相关文章:

代码似乎是正确的,但程序在打印数组的第一行后挂起

java - 添加新项目时Listview跳转到顶部

python - 将 numpy 数组拆分为两个不同大小的子集

python - 未知维度张量的逐元素乘法

python - 在 Tensorflow 2.0 中用另一个张量索引张量的第 k 维

python - 如何编写一个正则表达式来匹配一个字符串文字,其中转义是引号字符的两倍?

python - 在对象列表 Python 3 中的所有对象上调用方法的惯用方式

python - 以 Python 方式使用列表对 numpy 数组进行索引

python - django 中的自定义注册重定向

python - 从 Python 列表中提取数字