import numpy as np
观察以下两个输出语句结果的不同:
import numpy as np
a1 = np.array([[1, 2], [3, 4]])
c1 = np.array([[5,6],[7,8]])
b1 = np.mat([[1, 2], [3, 4]])
d1 = np.mat([[5,6],[7,8]])
print("a1乘c1的结果:",a1*c1)
print("b1乘d1的结果:",b1*d1)
输出结果会有不同,分别为:
a1乘c1的结果: [[ 5 12]
[21 32]]
b1乘d1的结果: [[19 22]
[43 50]]
于是我们可以得知:array()函数的乘法是矩阵元素所对应位置的两个数进行相乘!而mat()函数是遵循矩阵乘法规则,所以一定要谨慎使用这两个函数。
不过,无论用array()函数还是mat()函数,若让他们都遵循矩阵乘法的规则,可以对此二阶矩阵应用dot()函数,看下面计算:
print(dot(a1,c1))
print(dot(b1,d1))
输出结果均为:
[[19 22]
[43 50]]
[[19 22]
[43 50]]
import numpy as np
a1 = np.array([[1,2], [3,4]])
c1 = np.array([[5,6],[7,8]])
b1 = np.mat([[1,2], [3,4]])
d1 = np.mat([[5,6],[7,8]])
print(np.multiply(a1,c1))
print(np.multiply(b1,d1))
[[ 5 12] [21 32]] [[ 5 12] [21 32]]
如果我们要算一个矩阵的平方(即两个相同矩阵相乘)。把输出函数变一下,观察一下结果的不同:
print("a1的平方",a1**2)
print("b1的平方",b1**2)
输出结果为:
a1的平方 [[ 1 4]
[ 9 16]]
b1的平方 [[ 7 10]
[15 22]]
结论用array()函数求的平方是对应位置之积形成的矩阵。用mat()函数求的平方实际上是遵循矩阵计算得出来的(注意:此时的a1、b1矩阵均是2X2的,遵循矩阵乘法计算,如果换成2X3的矩阵就不可以了,这点应注意)。
总结一下:array()函数的相乘中:*代表点乘(对应元素相乘),np.dot()代表矩阵乘积 np.multiply()代表对应元素点乘
mat()函数的乘法中:*代表矩阵乘,np.dot()矩阵乘法,np.multiply()代表对应元素点乘
对于生成的矩阵来说:
import numpy as np
x = np.mat([2,3])
y=np.mat([1,4])
print (np.dot(x,y))维度合适就是实现矩阵乘法