常用于矩阵乘法计算,以下用法分为两种情况来介绍!
格式:np.dot(a,b)、np.dot(a,b.T)
注意:文中用到了arange、dot、reshape函数、转置(.T)以及翻转。
一、用法
1、如果处理的是一维数组,则得到的是两数组的內积(相应的元素相乘)
In : d = np.arange(0,5)
Out: array([0, 1, 2, 3, 4]) #得到一个数组[0, 1, 2, 3, 4]
In : e = d[::-1] #将d翻转排列
Out: array([4, 3, 2, 1, 0])
In : np.dot(d,e)
Out: 10 # 10 = 0*4 + 1*3 + 2*2 + 3*1 + 4*0
2、如果是二维矩阵之间的运算,则得到的是矩阵积。
Example one:
In : a = np.arange(1,5).reshape(2,2)
Out: array ([[1, 2],
[3, 4]]) #得到一个2*2的四元素(1~4)方阵
In : b = np.arange(5,9).reshape(2,2)
Out: array ([[5, 6],
[7, 8]]) #得到一个2*2的四元素(5~8)方阵
In : np.dot(a,b) #将a和b进行正常矩阵相乘,而不是元素相乘
Out: array ([[19, 22], #例如 19 = 1 * 5 + 2 * 7
[43, 50]])
Example two:
In : a = np.arange(1,5).reshape(2,2)
Out: array ([[1, 2],
[3, 4]]) #得到一个2*2的四元素(1~4)方阵
In : b = np.arange(5,9).reshape(2,2)
Out: array ([[5, 6],
[7, 8]]) #得到一个2*2的四元素(5~8)方阵
In : np.dot(a,b.T) #将a和b的转置进行正常矩阵相乘,而不是元素相乘
Out: array ([[17, 23], #例如 17 = 1 * 5 + 2 * 6
[39, 53]])
二、注意事项
1、 np.dot(a,b) 与 a.dot(b) 效果相同。因为dot除了可以numpy库调用,还可以由数组实例对象进行调用。
2、由线性代数可知 np.dot(a,b) 与 np.dot(b,a) 得到的结果可能不一样。