numpy:源代码中的循环定义

2024-05-19 14:13:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我去查找源代码到np.transposesource),定义似乎是循环的?在

def transpose(a, axes=None):

    try:
        transpose = a.transpose
    except AttributeError:
        return _wrapit(a, 'transpose', axes)
    return transpose(axes)

如果transpose(a)所做的就是调用a.transpose,那么我们如何查找a.transpose?在


代码的哪一部分在进行换位?我看到的只是转座子的另一个功能。在


Tags: 代码nonesourcereturn定义源代码defnp
0条回答
网友
1楼 · 发布于 2024-05-19 14:13:44

以下是_wrapit的代码:

File:       /usr/local/lib/python2.7/site-packages/numpy/core/fromnumeric.py
Definition: numpy.core.fromnumeric._wrapit(obj, method, *args, **kwds)
Source:
def _wrapit(obj, method, *args, **kwds):
    try:
        wrap = obj.__array_wrap__
    except AttributeError:
        wrap = None
    result = getattr(asarray(obj), method)(*args, **kwds)
    if wrap:
        if not isinstance(result, mu.ndarray):
            result = asarray(result)
        result = wrap(result)
    return result
网友
2楼 · 发布于 2024-05-19 14:13:44

它实际上不是循环引用。a.transpose是对对象方法的引用,而不是numpy定义的函数。它实际上是在说“如果object a已经有了一个transpose方法,那么就别管它;否则,使用_wrapit将对象{}包装在ndarray对象中”。在

由于ndarray类有一个transpose方法,因此将Python对象强制到该类中可以让对象访问该方法。在

这有点超出了我的专业领域,但是看起来ndarray是在numpy代码的C部分中定义的,因此您可以在那里找到它背后的实际逻辑。在

相关问题 更多 >