【对 Numpy.dot() 的理解】
我看了一下 「使用 Python 进行科学计算:NumPy入门 」 这个教程,其中 dot() 函数有点抽象,为了方便大家学习,我在这里简单的说下我对它的理解。
dot()
在一维,二维情况下,dot表现形式不同 。
-
一维数组:则得到的是两数组的內积(即一一对应相乘)
In : d = np.arange(0,9) Out: array([0, 1, 2, 3, 4, 5, 6, 7, 8]) In : e = d[::-1] Out: array([8, 7, 6, 5, 4, 3, 2, 1, 0]) #0+7+12+15+16+15+12+14+7+0=84 In : np.dot(d,e) Out: 84
-
二维数组:则得到的是两数组的矩阵积
In : a = np.arange(1,5).reshape(2,2) Out: array([[1, 2], [3, 4]]) In : b = np.arange(5,9).reshape(2,2) Out: array([[5, 6], [7, 8]]) In : np.dot(a,b) Out: array([[19, 22], [43, 50]])
结果为矩阵积,你就把结果想象成矩阵,而矩阵的点的坐标由行和列组成。
示例图如下:

解释一下矩阵的坐标(x,y)。
x:代表数组 a 的行号。
y:代表数组 b 的列号。
所以矩阵结果为:
(0,0):1*5+2*7=19
(0,1):1*6+2*8= 22
其他同理。
接下来重新看看这个例子:
import numpy as np
a = np.arange(25)
a = a.reshape((5, 5))
b = np.array([10, 62, 1, 14, 2, 56, 79, 2, 1, 45,
4, 92, 5, 55, 63, 43, 35, 6, 53, 24,
56, 3, 56, 44, 78])
b = b.reshape((5, 5))
print(a.dot(b))
>>> [[ 417 380 254 446 555]
[1262 1735 604 1281 1615]
[2107 3090 954 2116 2675]
[2952 4445 1304 2951 3735]
[3797 5800 1654 3786 4795]]
把这个二维数组矩阵积拆解成一维数组内积:
a = np.array([0, 1, 2, 3, 4])
b = np.array([10,56, 4, 43, 56])
print(a.dot(b))#417
a = np.array([0, 1, 2, 3, 4])
b = np.array([61,79, 92, 35, 3])
print(a.dot(b))#380
...
a:
[[ 0 1 2 3 4]
[ 5 6 7 8 9]
[10 11 12 13 14]
[15 16 17 18 19]
[20 21 22 23 24]]
b:
[[10 62 1 14 2]
[56 79 2 1 45]
[ 4 92 5 55 63]
[43 35 6 53 24]
[56 3 56 44 78]]
我觉得这样写很浅显易懂了,如果还不会请私信我。
网友评论