np.dot()函数主要有两个功能,向量点积和矩阵乘法,这里我就简单列举了三种最常用到的情况
import numpy as np
a = np.array([1, 2, 3, 4, 5])
b = np.array([6, 7, 8, 9, 10])
print(np.dot(a, b))
output:
130
[Finished in 0.2s]
import numpy as np
a = np.random.randint(0,10, size = (5,5))
b = np.array([1,2,3,4,5])
print("the shape of a is " + str(a.shape))
print("the shape of b is " + str(b.shape))
print(np.dot(a, b))
output:
the shape of a is (5, 5)
the shape of b is (5,)
[42 85 50 81 76]
[Finished in 0.2s]
这里需要注意的是一维矩阵和一维向量的区别,一维向量的shape是(5, ), 而一维矩阵的shape是(5, 1), 若两个参数a和b都是一维向量则是计算的点积,但是当其中有一个是矩阵时(包括一维矩阵),dot便进行矩阵乘法运算,同时若有个参数为向量,会自动转换为一维矩阵进行计算。
import numpy as np
a = np.random.randint(0, 10, size = (5, 5))
b = np.random.randint(0, 10, size = (5, 3))
print("the shape of a is " + str(a.shape))
print("the shape of b is " + str(b.shape))
print(np.dot(a, b))
output:
the shape of a is (5, 5)
the shape of b is (5, 3)
[[ 66 80 98]
[ 53 60 60]
[ 65 84 85]
[ 25 113 101]
[ 42 78 77]]
[Finished in 0.2s]
由于multiply是ufunc函数,ufunc函数会对这两个数组的对应元素进行计算,因此它要求这两个数组有相同的大小(shape相同),相同则是计算内积。如果shape不同的话,会将小规格的矩阵延展成与另一矩阵一样大小,再求两者内积。
两种情况:
1、当两个规格大小一样时,得到结果则是两个的内积
In : a = np.arange(1,5).reshape(2,2)# a.shape = (2,2) #a.shape = (2,2)
In : b = np.array([1,2,3,4]).reshape(2,2) #b.shape = (2,2)
Out: [[1 2] #其中a =b
[3 4]]
In : np.multiply(a, b)
Out: [[ 1 4]
[ 9 16]] #结果是a与b的内积
2、当两个矩阵大小不一样,则先将小的扩大到与另一矩阵大小一样,再求内积
In : a = np.array ([[1,2,3],[4,5,6]]) # a.shape = (2, 3)
Out: [[1 2 3]
[4 5 6]]
In : b = np.array([1,2,3]) # b.shape = (1,3)
In : np.multiply(a, b) #先将b扩展成 array ([[1, 2, 3],
# [1, 2, 3]])
Out: array ([[1, 4, 9],
[4,10,18]]) #最后a与b*的内积(b*是延展后的b)
作用
对数组执行对应位置相乘
对矩阵执行矩阵乘法运算
A = np.arange(1,5).reshape(2,2)
B = np.arange(0,4).reshape(2,2)
print(A*B)
array([[ 0, 2],
[ 6, 12]])
(np.mat(A))*(np.mat(B))
matrix([[ 4, 7],
[ 8, 15]])