此篇文章在2022年10月28日被记录
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.]])
标签:转置,方阵,矩阵,笔记,np,array,Numpy,dot
From: https://www.cnblogs.com/shumei52/p/18597526