Python 将列表与数组相乘为点积

Python 将列表与数组相乘为点积,python,python-3.x,numpy,Python,Python 3.x,Numpy,我遇到了一个代码,它执行列表“a”与numpy数组“B”的一般点积 A = [1,2,3,4,5,6] B = np.arange(18).reshape(3, len(A)) result = np.dot (B,A) result2 = np.dot (A,B) np.点(A,B)给出错误:“值错误:形状(6,)和(3,6)未对齐:6(尺寸0)!=3(尺寸0)” 然而,np.dot(B,A)给出了结果[70 196 322] 你能帮我理解为什么np.dot(B,A)有效,而np.dot(

我遇到了一个代码,它执行列表“a”与numpy数组“B”的一般点积

A = [1,2,3,4,5,6]
B = np.arange(18).reshape(3, len(A))

result = np.dot (B,A)
result2 = np.dot (A,B)
np.点(A,B)
给出错误:“值错误:形状(6,)和(3,6)未对齐:6(尺寸0)!=3(尺寸0)”

然而,
np.dot(B,A)
给出了结果[70 196 322]

你能帮我理解为什么
np.dot(B,A)
有效,而
np.dot(A,B)
无效吗

理想情况下,我希望只有当第一个矩阵的列数与第二个矩阵的行数相同时,点积才起作用。
B有3行6列,A有1行6列。因此,我希望
np.dot(B,A)
np.dot(A,B)
都不起作用。

通常,这个操作永远不会起作用,因为
A
B
的形状不同

然而,
np.dot(B,A)
起作用的原因是因为
np.dot
是。所以真正发生的事情是,对B(
B[0]
B[1]
,和
B[2]
)和
A
的所有三个索引调用
np.dot
[70 196 322]
的返回值是所有三个
np.dot
调用的结果,组合成一个数组


np.dot(A,B)
出现错误的原因是,使用
A
的任何索引调用
np.dot
(例如,
np.dot(A[0],B)
),仍然具有无效的形状。

np.dot(A,B)的基本规则将A的最后一个轴与B的最后一个轴的下一个轴相匹配。在
einsum
符号中,这是“ij,jk->ik”,其和在共享的“j”上

但是,
dot
对1d情况有明确的规则

(6,)与(6,)生成标量(向量内部“点”积,
a.b

(6,)与(6,3)产生(3,)(共享6)

(3,6)和(6,)也可以

但是(6,)与(3,6)一起失败(第2个6在错误的位置)


matmul
也这么做,但谈到添加临时尺寸1维度。

它的行为符合您的预期,对吗?这里有什么问题?B有3行6列,A有1行6列。由于B的列数不等于A中的行数,我希望np.dot(B,A)不起作用。numpy中N大小的1-D数组不是1xN大小的矩阵。当第二个参数是一维数组时,
np.dot
是如何工作的,你应该看一下文档:你读过文档了吗?他们怎么说一维阵列?