为了账号安全,请及时绑定邮箱和手机立即绑定

numpy.dot 函数矩阵乘法:Numpy 将 AxB 矩阵和 1xB 矩阵相乘为 AxB 矩阵和

numpy.dot 函数矩阵乘法:Numpy 将 AxB 矩阵和 1xB 矩阵相乘为 AxB 矩阵和

白猪掌柜的 2022-11-01 14:27:21
在下面的代码中,我必须将一个 5x3 矩阵与一个向量相乘。对我来说,向量似乎是一个 1x3 矩阵,但是,python 将它视为一个 3x1 矩阵。为什么 w 在下面的代码中是一个 3x1 矩阵,或者为什么 python 将它变成一个 3x1 矩阵?先感谢您。import numpyX = numpy.array([[4.6, 3.4, 1.4],    [6.5, 3.2, 5.1],    [5.7, 2.9, 4.2],    [6.6, 3.,  4.4],    [6.,  2.9, 4.5]])print(X)print(X.shape)print("")wb0 = numpy.array([0.0, 1.0, 1.0, 1.0])print(wb0)print("shape wb0",wb0.shape)print()w = wb0[1:]print(w)print("shape w",w.shape)print("")print(numpy.dot(X,w)) 
查看完整描述

2 回答

?
慕后森

TA贡献1802条经验 获得超5个赞

不要将数学中使用的维度的含义与 numpy 中的维度混淆。

你的第一个矩阵的形状是 (5,3),这是正确的。它的维度为 2。

第二个向量不是 numpy 的 3x1 矩阵。它的形状为 (3,),维度为 1:


wb0 = np.array([ 1.0, 1.0, 1.0])

numpy 的等效 3x1 矩阵如下:


wb1 = numpy.array([[1.0], [1.0], [1.0]])

print(wb1)

print("shape wb1",wb1.shape)

如您所见,这里我们有两个维度来wb1比较wb0。虽然wb0在您看来是 3x1 矩阵,但对于 numpy,它是一个 (3,) 矩阵。

的 1x3 矩阵wb01如下:


wb2 = numpy.array([[1.0, 1.0, 1.0]])

print(wb2)

print("shape wb0",wb2.shape)

因此,numpy 中的维度和形状不同于一般代数中用于矩阵的维度。可以在以下线程中找到非常详尽的解释:Difference between numpy.array shape (R, 1) and (R,)


在您的情况下,numpy 能够在 (5,3) 矩阵和 (3,) 矩阵之间进行矩阵乘法的原因是dot函数的实现:


如果 a 是 ND 数组且 b 是一维数组,则它是 a 和 b 的最后一个轴上的和积。


如果对 (5,3) 矩阵和 (3,1) 矩阵使用点函数,您会得到相同的结果:


import numpy


X = numpy.array([[4.6, 3.4, 1.4],

    [6.5, 3.2, 5.1],

    [5.7, 2.9, 4.2],

    [6.6, 3.,  4.4],

    [6.,  2.9, 4.5]])


print(X)

print(X.shape)

print("")


wb0 = numpy.array([0.0, 1.0, 1.0, 1.0])

print(wb0)

print("shape wb0",wb0.shape)


print()


w = numpy.array([[1.0], [1.0], [1.0]])

print(w)

print("shape w",w.shape)


print("")

print(numpy.dot(X,w)) 

唯一的区别是,在您的情况下,最终结果的形状为 (5,),而在第二种情况下,结果的形状为 (5,1)。


查看完整回答
反对 回复 2022-11-01
?
蓝山帝景

TA贡献1843条经验 获得超7个赞

numpy.dot() 中的计算很大程度上取决于您的输入变量。文档字符串给出:

点(a,b,out=None)

[...]

  • 如果a是 ND 数组并且是 1-D 数组,则它是 和 的最后一个轴上的和b积。ab

  • 如果ab都是二维数组,则它是矩阵乘法,但最好使用 :func: matmulor a @ b

[...]

如果要使用矩阵乘法,则必须定义w为二维数组:

wb0 = numpy.array([[0.0, 1.0, 1.0, 1.0]])
w = wb0[0,1:]


查看完整回答
反对 回复 2022-11-01
  • 2 回答
  • 0 关注
  • 129 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信