gpt4 book ai didi

python - 当一个系列被传递给 Numpy exp() 函数时,为什么会返回一个系列?

转载 作者:行者123 更新时间:2023-12-02 17:01:25 25 4
gpt4 key购买 nike

除非 numpy 本身被编程为在将系列传递给它时返回一个系列,否则它会非常困惑。然而documentation在这个函数上没有提到当一个系列被传递给它时它返回一个系列。

了解我来自 java 背景并且我是 python 的新手。

最佳答案

NumPy ufunc 机制具有内置 Hook ,可自定义 ufunc 处理对象的方式。在这种特殊情况下,numpy.exp ufunc 调用系列的 __array__获取数组的方法,计算数组的指数,然后调用系列的 __array_wrap__对结果数组进行后处理的方法。

__array__ 是 ufunc 获取它知道如何使用的对象的方式,__array_wrap__ 是将结果转换回系列而不是数组的方式。

通过使用这些方法编写自己的类,您可以看到相同的机制在起作用:

In [9]: class ArrayWrapper(object):
...: def __init__(self, arr):
...: self.arr = arr
...: def __repr__(self):
...: return 'ArrayWrapper({!r})'.format(self.arr)
...: def __array__(self):
...: return self.arr
...: def __array_wrap__(self, arr):
...: return ArrayWrapper(arr)
...:

In [10]: numpy.exp(ArrayWrapper(numpy.array([1, 2, 3])))
Out[10]: ArrayWrapper(array([ 2.71828183, 7.3890561 , 20.08553692]))

关于python - 当一个系列被传递给 Numpy exp() 函数时,为什么会返回一个系列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54003165/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com