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数组))
。