numpy中dot和tensordot的区别是什么,举例说明
时间: 2024-05-04 19:18:07 浏览: 127
`numpy.dot`和`numpy.tensordot`都是用来计算数组之间的点积或矩阵乘法的函数,但它们的计算方式和应用场景有所不同。
`numpy.dot`计算的是两个数组的点积,如果两个数组都是一维数组,那么就是它们的内积,如果其中一个数组是二维数组,那么它就是一个矩阵,计算的是矩阵乘积。
举个例子,假设有两个一维数组a和b:
```
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
np.dot(a, b) # 输出 32
```
这里计算的是a和b的内积,结果为1x4+2x5+3x6=32。
如果把其中一个数组变成二维数组,那么就可以计算矩阵乘积,例如:
```
a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6], [7, 8]])
np.dot(a, b) # 输出 [[19, 22], [43, 50]]
```
这里计算的是a和b的矩阵乘积,结果为[[1x5+2x7, 1x6+2x8], [3x5+4x7, 3x6+4x8]] = [[19, 22], [43, 50]]。
而`numpy.tensordot`计算的是两个多维数组的点积,它可以看做是对两个数组进行展平(flatten)后再计算点积。因此,`numpy.tensordot`的应用场景通常是在高维数组计算中,例如计算张量的乘积。
举个例子,假设有两个三维数组a和b:
```
a = np.array([[[1,2],[3,4]],[[5,6],[7,8]]])
b = np.array([[[9,10],[11,12]],[[13,14],[15,16]]])
np.tensordot(a, b, axes=([0,1],[1,2])) # 输出 [[170, 188], [386, 428]]
```
这里的`axes`参数指定了计算时的维度,`[0, 1]`表示对a的前两维进行展平,`[1, 2]`表示对b的后两维进行展平,然后再进行点积计算。结果是一个二维数组。
阅读全文