【发布时间】:2017-06-18 18:39:27
【问题描述】:
我正在寻找关于广播规则和 numpy.dot 方法在乘法因子上的一些说明。我创建了两个形状 (2,) 和 (3,) 的数组,可以通过添加一个新轴(3,1 形状)来相乘,但即使添加一个新轴并转动它也不能通过 np.dot 方法成 (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) & (1,3) 的 np.dot 有效,但为什么不 (2,1) & (3,1) 因为广播规则第二条说,当其中之一时,两个维度是兼容的它们是 1。因此,如果其中一个维度是 1,则 np.dot 应该可以工作,或者我是否理解错误的第二条规则?当两者都是相同的形状时,还有为什么 X_9 有效(乘法)而不是 x_8(np.dot)。
【问题讨论】:
-
broadcasting规则不适用于dot。 -
您希望
dot对 2 个一维数组做什么?还是用 2 扩展为 2d?内积?外面? -
@hpaulj 我正在研究的方程 δ=W f(h) 试图获得内积。最后是一个标量值。所以我正在努力使用 np.dot 方法而不是 numpy 乘法,以便更好地理解以及我应该在哪里使用 np.dot 和 numpy 乘法。对此有何建议/经验?谢谢,在广播文档中没有发现 np.dot 不适用于他们。
-
' 在数学中,点积或标量积是一种代数运算,它采用两个等长的数字序列(通常是坐标向量)并返回一个数字' - 来自 wiki。请注意
equal-length规范。
标签: python numpy matrix-multiplication