当前位置: 首页 > web >正文

矩阵运算基础、矩阵求导

一、NumPy矩阵运算基础

import numpy as np
import pandas as pd

1. NumPy中的矩阵表示

        在NumPy中二维数组(array)和matrix类型对象都可以用于表示矩阵

1.1 利用数组创建矩阵

A = np.array([[1, 2], [1, 1]])
print(A)

print(type(A))

1.2 利用mat创建矩阵

AM = np.mat(A)
print(AM)

1.3 关于两种对象类型的选取说明
 

1.3.1 NumPy中的matrix类型对象和MATLAB中的matrix类型等价,和NmuPy中数组类型对象底层基本结构不同。

1.3.2 在NumPy中,针对大规数据,数组类型对象的计算速度要快于矩阵类型对象

1.3.3 矩阵类型对象可以通过运算符直接进行矩阵乘法,而二维数组要进行矩阵乘法(及其他矩阵运算),则必须要使用包括linalg(线性代数运算)模块在内的相关函数。

print(AM * AM)

print(A.dot(A))

# 新版NumPy也支持使用符号进行矩阵乘法
peint(A @ A)

2. NumPy中特殊矩阵构造方法

        在实际线性代数运算中,常涉及一些特殊矩阵,如单位矩阵、对角矩阵等,相关创建方法如下:

# 创建一个2*3的矩阵
a1 = np.arange(1, 7).reshape(2, 3)
a1

# 转置
a1.T

# 创建单位矩阵
np.eye(3)

注:单位矩阵之所以被称为单位,核心原因在于单位矩阵和任何矩阵相乘,都将返回原矩阵。

a = np.arange(5)
a

np.diag(a)

# 对角线向下偏移一位
np.diag(a, -1)

a1 = np.arange(9).reshape(3, 3)
a1

# 取上三角矩阵
np.triu(a1)

# 上三角矩阵向左下偏移一位
np.triu(a1, -1)

# 上三角矩阵向右上偏移一位
np.triu(a1, 1)

3. NumPy中矩阵基本运算

        由于NumPy中我们使用二维数组来表述矩阵,因此二维数组也就具备了数组和矩阵的两种属性。其中数组元素属性决定的基本运算相对简单,基础运算(如加减乘除)就是对应位置元素进行逐元素计算,而矩阵属性决定的运算则稍显复杂,在基础运算上,矩阵和数组的核心区别在于乘法运算。从另一个角度考虑,对于向量和矩阵这种具备一定结构的对象,有很多种容易混淆的计算规则。对于常用的计算规则如下。

3.1 逐元素相乘

a = np.arange(4)
a

a * a

A = a.reshape(2, 2)
A

A * A

3.2 向量点积

        所谓点积(也被称为内积),指的是向量或矩阵对应位置元素相乘后相加。向量点积有三种实现方法,分别是dot、vdot和inner。

np.dot(a, a)

(a * a).sum()

np.vdot(a, a)

np.inner(a, a)

3.3. 矩阵乘法

        在NumPy中,我们也可以使用诸多方法实现矩阵乘法,包括dot、@、matmul等。

a1 = np.arange(1, 7).reshape(2, 3)
a2 = np.arange(1, 10).reshape(3, 3)
# 矩阵乘法
np.matmul(a1, a2)

上述相乘过程如下所示:

        值得注意的是,矩阵相乘要求左乘矩阵的列数和右乘矩阵的行数相同,而内积计算过程则严格要求两个向量/矩阵形状完全一致。

4. NumPy中矩阵代数运算

        如果说矩阵的基本运算是矩阵基本性质,那么矩阵的线性代数运算,则是我们利用矩阵数据类型在求解实际问题过程中经常涉及到的线性代数方法,具体相关函数如下:

        NumPy中linalg是linear algebra(线性代数)的简写,也是NumPy中保存线性代数相关计算函数的模块。

4.1 矩阵的迹(trace)

        矩阵的迹就是矩阵对角元素之和,在NumPy中,可以使用trace函数进行计算

A = np.array([[1, 2], [4, 5]])
A

np.trace(A)

        当然对于矩阵的迹来说,计算过程不需要方正

B = np.arange(1, 7).reshape(2, 3)
np.trace(B)

4.2 矩阵的秩

A = np.array([[1, 3, 4], [2, 1, 3], [1, 1, 2]])
np.linalg.matrix_rank(A)

4.3 矩阵的行列式

A = np.array([[1, 2], [4, 5]])
np.linalg.det(A)

4.4 矩阵的逆

        对与满秩的方阵来说,可以求其逆矩阵。从基本定义上来看,如果矩阵B和矩阵A相乘能够得到单位矩阵,即:

则称B为A的逆矩阵,也可将B写作。当然逆矩阵的性质是相互的,可以称A、B为互逆

A = np.array([[1, 1], [3, 1]])
np.linalg.inv(A)

http://www.xdnf.cn/news/14319.html

相关文章:

  • 《Apollo 配置中心在动态主题系统中的设计与扩展》
  • openeuler 系统—— 集成大模型分析日志中的错误信息生成故障原因报告
  • LeetCode - 34. 在排序数组中查找元素的第一个和最后一个位置
  • GTSAM中InitializePose3::initialize()使用详解
  • 数据目录:企业数据管理的核心引擎与最佳实践
  • 各种运算符的学习心得
  • 【JavaScript-Day 41】JS 事件大全:click, keydown, submit, load 等常见事件详解与实战
  • RK全志平台WiFiBT调试思路
  • 替换一个数字后的最大差值
  • 【配件出入库专用软件】佳易王配件进出库管理系统:轻量级仓储管理解决方案配件管理系统#进出库管理#仓储软件#库存统计#轻量级解决方案
  • 错题分析接口实现全流程
  • Vue3 + TypeScript 父组件点击按钮触发子组件事件方法
  • C#里与嵌入式系统W5500网络通讯(5)
  • 【python】bash: !‘: event not found
  • 【C语言】C语言发展历史、特点及其应用
  • DL00120-Lyapunov深度强化学习移动边缘计算网络在线计算卸载python
  • 互联网大厂Java求职面试:AI大模型应用实践中的架构挑战与实战
  • Android Activity全面解析:从创建到生命周期的完整指南
  • 深入解析 Java 集合框架:从底层原理到实战优化
  • Pytorch 卷积神经网络参数说明一
  • Python----OpenCV(图像的绘制——绘制直线,绘制矩形,绘制圆形,绘制多边形)
  • (javaSE)抽象类和接口:抽象类概念语法和特性, 抽象类的作用;接口的概念 接口特性 实现多个接口 接口间的继承 Object类
  • Qt--信号槽发送QVector
  • Relin梦中门——第二章——感官
  • jojojojojo
  • java 设计模式_行为型_15迭代器模式
  • nginx 配置返回 文件大小
  • Go语言底层(四): 深入浅出Go语言的ants协程池
  • 第八章:排序
  • 高速隔直电容设计