首页 > 解决方案 > 为什么在 numpy 中某些方法(例如 np.dot)可以用点表示法调用,而其他方法(例如 np.insert)不能?

问题描述

刚开始学习 OOP 以及方法和函数之间的区别。对一些非常基本的概念有一些困难。我的理解是,方法通常可以通过两种等效的方式调用。

object.method(parameters) 

或者

class.method(object, parameters)

问题为什么有些 numpy 方法可以使用这两种表示法调用,而其他方法似乎只能使用一种?例如,如果 A 和 B 都是相同长度的 numpy 数组,我可以将 numpy.dot 称为

np.dot(a,b) 

或等效地

a.dot(b) 

然而,对于一些方法,如 numpy.roll 或 numpy.insert(该方法对一个对象而不是两个对象进行操作),情况并非如此。

np.insert(a,[0],[1])

工作正常,而

a.insert([0],[1])

返回以下属性错误

AttributeError: 'numpy.ndarray' object has no attribute 'insert'

这是因为 np.dot 是特定于 ndarray 子类的方法,而 np.insert 可能是所有 numpy 对象的方法,这使得它实际上只能作为函数调用?

任何见解都会有所帮助,谢谢!

标签: pythonnumpyoopmethods

解决方案


我可能错了,但你可能有兴趣看看:https ://github.com/numpy/numpy/blob/60cd9d717524e5a003bee9e4270b9c6b8144a7af/numpy/init .pyi #L1358

您可以在其中看到 ndarray 实现了一个dot方法,其中它似乎将自身作为第一个参数传递,然后采用第二个“类似数组”的输入。因此obj.dot(other_obj).


推荐阅读