numpy.dot和a.dot(b)的区别

14

有区别吗?

import numpy as np
np.dot(a,b)

a.dot(b)

内部的?我没有找到关于后一种方法的任何文档。


1
这是你找不到的文档,链接在这里:https://docs.scipy.org/doc/numpy/reference/generated/numpy.ndarray.dot.html,基本上可以归结为“等同于`np.dot`”。该方法仅适用于数组,而不适用于任意的类似数组的对象。 - user2357112
1
np.dot([1,2,3],[4,5,6]) 可以工作。通常,如果有函数和方法两个版本,则在进行一些参数处理后,函数将委托给方法。在 dot 的情况下,两者都被编译,因此更难研究细节。在您的代码中使用看起来更漂亮的形式。 - hpaulj
1
如果您计划在numpy代码中使用一些复杂的外部库,请考虑使用np.dot()变体。这至少对于autograd是正确的:同样,我们不支持A.dot(B)语法; 请改用等效的np.dot(A,B)。我们不支持第一种方式的原因是子类化ndarray会引起很多问题。由于不子类化ndarray,某些子类检查可能会出错,例如isinstance(x, np.ndarray)可能会返回False。 - sascha
@user2357112:有没有人愿意给出一个答案,这样问题就不再无解了? - McLawrence
1个回答

8
如果a是一个数组,那么它们是等价的。你找不到dot方法的文档在这里,它们归结为“参见numpy.dot”。
如果type(a) is not numpy.ndarray,那么numpy.dot将把a转换为数组并使用该数组进行乘法运算,而a.dot将执行a类型所规定的操作,或者如果a没有dot方法则引发AttributeError异常。

那么对于 A.shape = (47,1), B.shape = (47,3)A.dot(B),通过转置 A 进行点积运算得到的 C 形状为 (47,3) - mLstudent33
2
@mLstudent33:什么?不对。在那种情况下,A.dot(B)会出错。 - user2357112
"error.shape = (100,1)" 和 "X.shape = (100,3)",我能够执行 "error.dot(X)",请在此处检查 "ln[10]" 和 "ln[11]":https://github.com/suraggupta/coursera-machine-learning-solutions-python/blob/master/Exercise2/exercise2.ipynb - mLstudent33
1
@mLstudent33:这些是一维数组,而不是二维数组。没有第二个长度为1的维度。 - user2357112
明白了,谢谢!我在想数学中的点积,即使是一维数组,也需要显式地进行转置。 - mLstudent33
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接