A=np.array([
[1,2],
[3,4]
])
B=np.ones(2)
A显然是2X2的形状
numpy如何允许我计算点积np.dot(A,B)
[1,2] (dot) [1,1]
[3,4]
对于点积而言B必须具有2X1的尺寸,或者更确切地说是这个尺寸
[1,2] (dot) [1]
[3,4] [1]
这是一个非常愚蠢的问题,但我无法弄清楚我在哪里出错?
早些时候我曾经认为np.ones(2)会给我这个:
[1]
[1]
但它给了我这个:
[1,1]
与点积相关的矢量和矩阵形状的大多数规则主要是为了具有可以扩展到更高张量阶的相干方法。但在处理一阶(向量)和二阶(矩阵)张量时,它们并不是非常重要。这些订单是绝大多数numpy
用户所需要的。
因此,@
和np.dot
针对这些订单进行了优化(数学和输入解析),总是在第一个轴的最后一个轴和第二个轴的最后一个轴(如果适用)上求和。 “如果适用”是一种傻瓜式的证据,以确保输出是绝大多数情况下的预期,即使形状在技术上不合适。
与此同时,我们这些使用高阶张量的人被降级为np.tensordot
或np.einsum
,这些都是关于尺寸匹配的所有琐碎的小规则。