Python numpy例程和ndarray方法之间的区别?

Python numpy例程和ndarray方法之间的区别?,python,numpy,Python,Numpy,使用numpy时,通常可以在从numpyAPI调用函数和从ndarray调用函数之间进行选择,例如: >>> import numpy as np >>> array_ = np.array([True, False, True]) >>> np.any(array_) True >>> array_.any() True 在功能上,这些在我看来是相同的; 是吗? 它们在编程上不同吗?(例如,性能/内存方面) 我试着在nu

使用
numpy
时,通常可以在从
numpy
API调用函数和从
ndarray
调用函数之间进行选择,例如:

>>> import numpy as np
>>> array_ = np.array([True, False, True])
>>> np.any(array_)
True
>>> array_.any()
True
在功能上,这些在我看来是相同的; 是吗? 它们在编程上不同吗?(例如,性能/内存方面)


我试着在
numpy
参考手册中找到关于和的答案,但据我所知,没有给出任何解释。

首先要注意术语,所以这个例子的其余部分很清楚--
np。any(arr)
是一个函数
arr.any()
在技术上是一种实例方法


通常,顶级
np.(arr)
函数是
arr
方法的包装

以下是来自
NumPy.core.fromnumeric的
np.any()
,NumPy版本1.14.5的源代码:

def any(a, axis=None, out=None, keepdims=np._NoValue):
    arr = asanyarray(a)
    kwargs = {}
    if keepdims is not np._NoValue:
        kwargs['keepdims'] = keepdims
    return arr.any(axis=axis, out=out, **kwargs)
其他版本的NumPy(如)可能使用“”来执行几乎相同的操作。有关
np.transpose()
的类似示例,请参见Q/A。一般来说,它归结为
np.(arr)
变成了某种形式的
getattr(arr,)
,至少对于中的内容是这样的



从比较的角度来看——您谈论的是在使用顶级函数时增加的额外开销,但这带来了一些额外的灵活性:例如,有一个对
np.asanyarray(a)
的调用,这意味着您可以将Python列表作为
a
传递给函数。在我的计算机上,调用
np.asanyarray(arr)
要花费
arr.any()的1/8时间,因此要在答案中注入一些观点,从性能优化的角度来看,在这两者之间进行选择可能不是第一个考虑的地方。

如果你执行
某个数组,foo
,如果
foo
未连接到
some\u数组
,它将返回到
numpy.foo(数组(some\u数组))