「弱小和无知不是生存的障碍,傲慢才是」|

shumei52

园龄:1年7个月粉丝:7关注:1

Numpy矩阵运算笔记

此篇文章在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.]])

本文作者:shumei52

本文链接:https://www.cnblogs.com/shumei52/p/18597526

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   shumei52  阅读(16)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起