NumPy 对象方法和 NumPy 函数调用有什么区别?

Ste*_*ell 8 python methods numpy function

如果我有一个 NumPy 数组,

>>> x = np.arange(10)
Run Code Online (Sandbox Code Playgroud)

使用对象方法获取有关该数组的信息有什么区别

>>> x.mean()
4.5
Run Code Online (Sandbox Code Playgroud)

与使用 NumPy 函数相比

>>> np.mean(x)
4.5
Run Code Online (Sandbox Code Playgroud)

我期望对象方法正在调用函数,但有些示例中函数不包含为方法,例如

>>> np.median(x)
4.5
>>> x.median()
AttributeError: 'numpy.ndarray' object has no attribute 'median'
Run Code Online (Sandbox Code Playgroud)

排除某些函数似乎表明函数式方法比面向对象的方法更完整或更受青睐,因为它消除了来回切换的需要。是否有意排除某些方法?与另一种方法相比,一种方法是否有固有的优势?

小智 6

之间存在显着差异numpy.sortndarray.sort:前者返回数组的副本,后者就地排序。

对于其他方法,也可以使用等效函数。函数形式将接受可以转换为 NumPy 数组的类似数组的集合;这有时很方便。另一方面,这是以更多的检查和函数调用为代价的,因此方法形式应该更快一点。实际上,这可能可以忽略不计;对我来说,决定因素通常是方法需要输入更少的字符。

一些数学运算更自然地写为方法:当 A 是二维数组时,比较np.transpose(A)和。A.T