我正在寻找关于乘法因子上的广播规则和numpy.dot方法的一些说明。我创建了两个形状(2,)和(3,)的数组,它们可以通过添加一个新的轴(3,1形状)相乘,但它不能通过np.dot方法,即使添加了一个新轴并转动变成(3,1)形状。下面是一些小测试。Numpy dot形状(2,)(3,1)给出了错误,但乘法不是
x_1 = np.random.rand(2,)
print(x_1)
x_2 = np.random.rand(3,)
print(x_2)
> [ 0.48362051 0.55892736]
> [ 0.16988562 0.09078386 0.04844093]
x_8 = np.dot(x_1, x_2[:, np.newaxis])
> ValueError: shapes (2,) and (3,1) not aligned: 2 (dim 0) != 3 (dim 0)
x_9 = x_1 * x_2[:, np.newaxis]
print(x_9)
> [[ 0.47231067 0.30899592]
[ 0.17436521 0.11407352]
[ 0.01312074 0.00858387]]
x__7 = x_1[:, np.newaxis] * x_2[:, np.newaxis]
> ValueError: operands could not be broadcast together with shapes (2,1) (3,1)
我明白np.dot的(2,1)&(1,3)的作品,但为什么不(2,1)&(3,1),因为广播规则二说,两个维度当它们中的一个是1时是兼容的。因此,如果它的一个维度是1,那么np.dot应该工作,或者我理解了第二个规则是错误的?此外,为什么X_9工作(乘法)而不是x_8(np.dot),两者都是相同的形状。
“广播”规则不适用于“点”。 – hpaulj
你对2个1d数组有什么期待'dot'?或者2扩展到2d?内在产品? Outter? – hpaulj
@hpaulj我正在处理的等式δ= W f(h)试图获得内积。最终的标量值。所以我正在努力在np.dot方法上使用numpy乘法来更好地理解,并且我应该使用np.dot和numpy乘法。任何建议/经验要知道吗?并且,谢谢,在广播文档中没有发现np.dot不适用于他们。 –