形状(2,)(3,1)上的圆点会产生错误,但乘法不会

2024-09-25 08:28:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我想了解一下广播规则纽比.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不起作用(美国运输部),当两者形状相同时。在


Tags: 方法规则npnotrandomdot形状print
1条回答
网友
1楼 · 发布于 2024-09-25 08:28:49

在美国运输部用于矩阵矩阵乘法(其中列向量可以被视为具有一列的矩阵,而行向量可以被视为具有一行的矩阵)。 *(multiplication)用于在参数之一是标量的情况下进行标量乘法,否则进行广播。所以广播规则不适用于美国运输部. {a1}在这里,广播规则如u所述有效

When operating on two arrays, NumPy compares their shapes element-wise. It starts with the trailing dimensions, and works its way forward. Two dimensions are compatible when

  1. they are equal, or
  2. one of them is 1

所以,你的(唯一)维度x_1(它是2)与x_2的最后一个维度兼容(它是1,因为你添加了一个新维度),剩下的维度是3。在

相关问题 更多 >