3.6.1 矩阵运算规则
矩阵的加减法运算规则与数组相同,即元素运算,其结果返回新的矩阵。倍乘数运算也是矩阵内元素乘以倍数,返回新的矩阵,且倍数应置于运算符左边。
矩阵乘法运算规则是,只有当乘法运算符左边矩阵的列数等于右边矩阵的行数时,两个矩阵才能进行乘法运算,即mn矩阵与np矩阵满足相乘条件,且位置不能互换。具体步骤是,左矩阵第一行乘以右矩阵第一列分别相乘,第一个数乘第一个数,乘完之后相加,即为结果的第一行第一列的数,依次往下运算 。
3.6.2 matrix对象
NumPy和Matlab不一样,对于多维数组的运算,缺省情况下并不使用矩阵运算,可以调用相应的函数对数组进行矩阵运算。NumPy库提供了matrix类,使用matrix类创建矩阵对象,它们的加减乘除运算缺省采用矩阵方式计算。示例代码:
>>>m1 = np.matrix([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) #直接生成矩阵对象
>>>m1
matrix([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
>>>a = np.arange(9).reshape((3, 3))
>>>m2 = np.matrix(a) #将数组转换成矩阵
>>>m2
matrix([[0, 1, 2],
[3, 4, 5],
[6, 7, 8]])
>>>m1 + m2 #矩阵加法即元素相加,与数组运算一样
matrix([[ 1, 3, 5],
[ 7, 9, 11],
[13, 15, 17]])
>>>m3 = m1*m2 #矩阵乘法
>>>m3
matrix([[ 24, 30, 36],
[ 51, 66, 81],
[ 78, 102, 126]])
>>>type(m3)
numpy.matrixlib.defmatrix.matrix
3.6.3 数组的点积
ufunc提供的dot()函数计算两个数组的点积,其满足矩阵乘法运算规则,它返回的是一个标量(只有大小没有方向的一个值)。示例代码:
>>>a1 = np.arange(1, 10).reshape((3, 3))
>>>a1
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
>>>a2 = np.arange(9).reshape((3, 3))
>>>a2
array([[0, 1, 2],
[3, 4, 5],
[6, 7, 8]])
>>>a3 = a1.dot(a2)
>>>a3
array([[ 24, 30, 36],
[ 51, 66, 81],
[ 78, 102, 126]])
>>>type(a3)
numpy.ndarray
>>>a4 = np.dot(a1, a2) #点积运算的另一种形式,等价于a1.dot(a2)
>>>a4
array([[ 24, 30, 36],
[ 51, 66, 81],
[ 78, 102, 126]])
以上两个示例显示,数组点积的运算规则与矩阵乘法相同,不过点积返回的对象a3是ndarray类型,矩阵乘法返回的对象m3是matrix类型。
网友评论