Python-Numpy 矩阵基本运算
Numpy矩阵基本运算
1、python矩阵操作
引入库:
import numpy as np
创建一个二维矩阵:
>>>a = np.mat([[1, 2, 3], [4, 5, 6]])
打印a矩阵:
>>>a matrix([[1, 2, 3], [4, 5, 6]])
打印a矩阵形状:
>>>a.shape (2,3)
转置a矩阵:
>>>a.T matrix([[1, 4], [2, 5], [3, 6]])
使用二维数组代替矩阵来进行矩阵运算
>>>b = np.array([[1, 2, 3], [4, 5, 6]]) >>>b array([[1, 2, 3], [4, 5, 6]])
矩阵加减法
>>>a+b matrix([[ 2, 4, 6], [ 8, 10, 12]]) >>>a-b matrix([[0, 0, 0], [0, 0, 0]])
2、python矩阵乘法
使用二维数组创建两个矩阵A和B
>>>A = np.array([[1, 2, 3], [4, 5, 6]]) >>>B = A.T >>>A array([[1, 2, 3], [4, 5, 6]]) >>>B array([[1, 4], [2, 5], [3, 6]])
一个矩阵的数乘,其实就是矩阵的每一个元素乘以该数
>>>2 * A array([[ 2, 4, 6], [ 8, 10, 12]])
dot 函数用于矩阵乘法,对于二维数组,它计算的是矩阵乘积,对于一维数组,它计算的是内积
>>>np.dot(A, B) array([[14, 32], [32, 77]]) >>>np.dot(B, A) array([[17, 22, 27], [22, 29, 36], [27, 36, 45]])
注意交换矩阵的前后位置会导致不同的结果
再创建一个二维数组,验证矩阵乘法的结合性
>>>C = np.array([[1, 2], [1, 3]]) >>>np.dot(np.dot(A, B), C) array([[ 46, 124], [109, 295]]) >>>np.dot(A, np.dot(B, C)) array([[ 46, 124], [109, 295]])
验证矩阵加法的分配性:(A+B)C=AC+BC
>>>A = B - 1 >>>np.dot(A+B, C) array([[ 8, 23], [12, 33], [16, 43]]) >>>np.dot(A, C) + np.dot(B, C) array([[ 8, 23], [12, 33], [16, 43]])
数乘的结合性
>>>2*(np.dot(A, C)) array([[ 6, 18], [10, 28], [14, 38]]) >>>np.dot(2*A, C) array([[ 6, 18], [10, 28], [14, 38]])
使用 eye 创建一个单位矩阵
>>>D = np.eye(2) array([[1., 0.], [0., 1.]])
一个矩阵乘以一个单位矩阵,还是它本身
>>>C array([[1, 2], [1, 3]]) >>>np.dot(C, D) array([[1., 2.], [1., 3.]])
3、python矩阵转置
矩阵的转置就是将矩阵的行变为列,将列变为行
第一个性质矩阵转置的转置就是它本身:(A')' = A
>>>A = np.array([[1, 2, 3], [4, 5, 6]]) >>>A array([[1, 2, 3], [4, 5, 6]]) >>>A.T.T array([[1, 2, 3], [4, 5, 6]])
创建两个相同尺寸的矩阵
>>>B = A.T array([[1, 4], [2, 5], [3, 6]]) >>>C = B - 1 array([[0, 3], [1, 4], [2, 5]])
验证矩阵转置的第二个性质:(A±B)' = A' ± B'
>>>(B+C).T array([[ 1, 3, 5], [ 7, 9, 11]]) >>>B.T+C.T array([[ 1, 3, 5], [ 7, 9, 11]])
验证矩阵转置的第三个性质:(KA)' = KA'
>>>(2 * A).T array([[ 2, 8], [ 4, 10], [ 6, 12]]) >>>2*AT array([[ 2, 8], [ 4, 10], [ 6, 12]])
验证矩阵转置的第四个性质:(AXB)' = B' X A'
>>>np.dot(A, B).T array([[14, 32], [32, 77]]) >>>np.dot(B.T, A.T) array([[14, 32], [32, 77]])
4、python求方阵的迹
创建一个方阵(方阵也就是行数等于列数的矩阵)
>>>E = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) >>>np.trace(E) 15
验证一下方阵的迹等于方阵的转置的迹
>>>np.trace(E) >>>np.trace(E.T) 15
验证一下方阵的乘积的迹
>>>F = E - 2 >>>np.trace(np.dot(E, F)) >>>np.trace(np.dot(F, E)) 171
验证一下方阵的和的迹等于方阵的迹的和
>>>np.trace(E + F) >>>np.trace(F + E) 24
5、python方阵的行列式计算方法
创建两个方阵,使用 linalg.det 方法求得方阵E和方阵F的行列式
>>>E = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) >>>F = np.array([[1, 2], [1, 3]]) >>>np.linalg.det(E) 0.0 >>>np.linalg.det(F) 1.0
6、python求逆矩阵/伴随矩阵
逆矩阵的定义:
设A是数域上的一个n阶方阵,若在相同数域上存在另一个n阶矩阵B,使得: AB=BA=E。 则我们称B是A的逆矩阵,而A则被称为可逆矩阵。当矩阵A的行列式|A|不等于0时才存在可逆矩阵。
伴随矩阵的定义:
设A为n节方阵,则由A的行列式|A|中各个元素的代数余子式Aij所构成的如下矩阵,~矩阵无法显示~,称为矩阵A的伴随矩阵,或简称 “伴随阵”创建一个方阵,求行列式
>>>A = np.array([[1, -2, 1], [0, 2, -1], [1, 1, -2]]) >>>A_abs = np.linalg.det(A) -3.0000000000000004
使用 linalg.inv 求得方阵A的逆矩阵
>>>B = np.linalg.inv(A) array([[ 1. , 1. , 0. ], [ 0.33333333, 1. , -0.33333333], [ 0.66666667, 1. , -0.66666667]])
利用公式求伴随矩阵
>>>A_bansui = B * A_abs array([[-3., -3., -0.], [-1., -3., 1.], [-2., -3., 2.]])
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。