我想了解一下广播规则纽比.dot方法超过乘法因子。我创建了两个shape(2,)和(3,)数组,它们可以通过添加一个新的轴(3,1 shape)来相乘,但它不能通过美国运输部方法,即使添加一个新轴并变成(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)
我明白美国运输部(2,1)&;(3,3)有效,但为什么(2,1)&;(3,1)不起作用,因为广播规则第二条说,当其中一个维度为1时,两个维度是兼容的。如果其中一个维度是1,美国运输部我应该工作还是我对第二条规则理解错误?还有为什么X_9起作用(乘法)而X_8不起作用(美国运输部),当两者形状相同时。在
在美国运输部用于矩阵矩阵乘法(其中列向量可以被视为具有一列的矩阵,而行向量可以被视为具有一行的矩阵)。 *(multiplication)用于在参数之一是标量的情况下进行标量乘法,否则进行广播。所以广播规则不适用于美国运输部. {a1}在这里,广播规则如u所述有效
所以,你的(唯一)维度x_1(它是2)与x_2的最后一个维度兼容(它是1,因为你添加了一个新维度),剩下的维度是3。在
相关问题 更多 >
编程相关推荐