首页 > 其他分享 >Numpy矩阵运算笔记

Numpy矩阵运算笔记

时间:2024-12-10 15:59:49浏览次数:4  
标签:转置 方阵 矩阵 笔记 np array Numpy dot

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

相关文章

  • Markdown学习笔记
    此篇文章在2022年10月21日被记录Markdown标题========在文本下方使用多个=======表示标题例如:这是一级标题===========演示:这是一级标题在文本下方使用多个----表示小一些的标题例如:这是二级标题--------演示:这是二级标题使用#号可表示1-6级标题,一级标题......
  • Numpy入门学习笔记
    此篇文章在2022年10月21日被记录Numpy简单应用============创建一个一维数组a=np.array([0,1,2,3,4])b=np.array((0,1,2,3,4))c=np.arange(5)d=np.linspace(0,2*np.pi,5)print(a)>>>[01234]print(b)>>>[01234]print(c)>>>[0......
  • markdown笔记
    1标题(六级)一级二级三级四级五级六级2引用这是一段引用3列表3.1有序列表把大象放进冰箱:打开冰箱把大象放进去关上冰箱3.2无序列表阿姆斯特丹加加林汤姆斯3.3任务列表明天要做的事-[]吃饭-[]睡觉-[]打豆豆......
  • 阿里巴巴全彩版“SpringCloudAlibaba 学习笔记”开源
    SpringCloudAlibaba为什么会出现?SpringCloudNetflix项目进入维护模式,SpringCloudNetflix将不再开发新的组件,我们知道SpringCloud版本迭代算是比较快的,因而出现了很多中岛的ISSUE都来不及Fix就又推另一个Release了。进入维护模式意思就是目前已知以后一段时......
  • Android笔记【20】利用Log来debug
    一、背景    在利用青云课API写聊天软件时,由于自己ui界面的column高度设计不当,导致没有看见下面的TextField,便没有输入信息,于是lazycolumn里面的messages.size为0,故不会显示内容。本人还以为无法运行到column内部,且在用text测试时由于两次text内容一致,在Box里面重叠,更......
  • 软件测试笔记|web自动化测试|你们是怎么处理弹窗的?
    VX公众Hao:阳哥整理软件测试笔记 在自动化测试中,常见的弹窗有警告框(alert)、确认框(confirm)和提示框(prompt)。以Selenium为例,处理方式如下:处理警告框(Alert)1.首先使用driver.switch_to.alert切换到警告框。2.可以使用accept方法来接受警告框(相当于点击“确定”按钮),示例代码......
  • 软件测试笔记|web自动化测试|自动化测试中,句柄是如何切换的?
    VX公众Hao:阳哥整理软件测试笔记 在Web自动化测试中,当页面打开新窗口或者切换到新的iframe时,就需要进行句柄切换来定位新页面或框架中的元素。以Selenium为例:窗口句柄切换1.首先,使用driver.current_window_handle获取当前窗口句柄。2.然后,打开新窗口后(例如点击一个链接......
  • 软件测试笔记|数据库基础|通过python,如何导入数据库,并使用数据库表数据?
    VX公众Hao:阳哥整理软件测试笔记 以下是使用Python操作常见数据库(以MySQL为例)的基本步骤:首先,需要安装对应的数据库驱动程序。对于MySQL,通常使用pymysql库。可以通过pipinstallpymysql命令安装。1.连接数据库importpymysql#建立连接conn=pymysql.connect(  ......
  • 软件测试笔记|数据库基础|数据库字段类型有哪些?char与varchar有什么区别?
    VX公众Hao:阳哥整理软件测试笔记 常见的数据库字段类型有以下几种:•数值型:•整数型:如TINYINT、SMALLINT、INT、BIGINT,分别用于存储不同范围的整数值。•浮点型:像FLOAT、DOUBLE,用于存储带有小数部分的数值。•字符型:•定长字符串:如CHAR,存储固定长度的字符数据。•......
  • 笔记本硬盘数据恢复
    一、基础恢复方法撤销恢复:如果刚刚删除了文件,可以尝试使用撤销键【Ctrl+Z】来取消之前的删除操作。回收站恢复:检查回收站,找到已删除的数据,右键单击并选择“还原”。这种方法适用于意外删除且未清空回收站的情况。文件历史记录恢复:如果之前启用了文件历史记录功能,可以进入“......