【问题标题】:What is the difference between NumPy object methods and NumPy function calls?NumPy 对象方法和 NumPy 函数调用有什么区别?
【发布时间】:2018-09-09 18:17:48
【问题描述】:

如果我有一个 NumPy 数组,

>>> x = np.arange(10)

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

>>> x.mean()
4.5

与使用 NumPy 函数相比

>>> np.mean(x)
4.5

我希望对象方法正在调用该函数,但是有些例子中函数不包含在方法中,例如

>>> np.median(x)
4.5
>>> x.median()
AttributeError: 'numpy.ndarray' object has no attribute 'median'

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

【问题讨论】:

  • 没有系统差异或关系。大多数函数都是用 Python 编写的,您可以阅读。许多人将操作委托给相应的方法(如果存在)。函数形式还可以在对其进行操作之前将列表转换为数组。方法调用通常会快一点,因为它涉及的调用层较少。
  • 还有运算符(转化为方法调用)、ufuncs(可能需要多个数组)和接收数组列表的函数。请记住,numpy 历史悠久,贡献者众多。

标签: python function numpy methods


【解决方案1】:

numpy.sortndarray.sort 之间有一个显着的区别:前者返回数组的副本,后者就地排序。

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

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

【讨论】:

    猜你喜欢
    • 2013-01-03
    • 1970-01-01
    • 2015-05-09
    • 2010-10-28
    • 2020-03-09
    相关资源
    最近更新 更多