0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

用Python实现矩阵与线性变换

CHANBAEK 来源:郎哥编程课堂 作者:郎宏林 2023-11-01 11:19 次阅读

认识矩阵

矩阵是向量的集合,把多个向量组织在一起就构成了一个矩阵。例如在三维空间内,有A、B、C三个向量。

图片

将A、B、C三个向量按照行的方式组织在一起构成了矩阵M:

图片

将A、B、C三个向量按照列的方式组织在一起构成了矩阵T:

图片

矩阵M的向量称为行向量,矩阵T的向量称为列向量。下面给出矩阵的定义:

矩阵是由m X n个数aij排列成的m行n列的数表,称为m行n列矩阵,简称m X n 矩阵。矩阵表示如下:

图片

在上述定义中,可以把矩阵A看作是由m个:

图片

向量构成的。

如果矩阵的行和列相同,即矩阵是由n X n个数aij排列成的n行n列的数表,称为n阶矩阵。

矩阵的转置运算

前面的矩阵M和矩阵T可以互相转换,这种转换称为矩阵的转置运算。矩阵的转置就是把矩阵的行列互换,行变成列,列变成行。例如对M矩阵行列互换后,就构成了矩阵T。

下面给出矩阵的转置概念:

把m X n矩阵A的行列依次互换得到n X m矩阵,称为矩阵A的转置矩阵,记作AT。

图片

矩阵的转置运算满足下面的运算律:

(AT)T = A

转置矩阵的转置矩阵是原矩阵。

(A + B)T = AT + BT

A与B和的转置矩阵等于A的转置矩阵与B的转置矩阵的和。

(AB)T = BTAT

A与B矩阵积的转置矩阵等于B的转置矩阵与A的转置的积(顺序不能颠倒)。

矩阵的加法运算

设有矩阵A和矩阵B:

图片

如何计算A+B和A-B呢?

两个矩阵进行加法和减法运算有一个前提条件,就是两个矩阵的行数和列数相同,在这种情况下,两个矩阵相加和相减的结果是一个新的矩阵,新矩阵的行数和列数和原来矩阵的行列数相同,其元素分别是两个矩阵对应元素的和值和差值。

图片

图片

矩阵的加法和减法运算可以看作矩阵内对应向量的加法或减法运算。例如在计算A+B的过程中,A的列向量或行向量分别与B的列向量或行向量相加,结果是新矩阵的列向量或行向量。

纯量与矩阵的乘法运算

纯量与矩阵相乘,结果矩阵与原矩阵的行列数相同,其元素的值是原矩阵中每个对应元素与纯量相乘的数值。

(-1)* B的计算过程如下所示:

图片

例1:编写Python程序,实现前面矩阵A和B的加法运算和减法运算。

在Python程序中,使用嵌套列表定义一个二维数组,这个二维数组就是一个矩阵。

#使用嵌套列表定义矩阵A和B

A = [[-1,3,2],[5,7,-2],[-3,0,1]]

B = [[8,2,-1],[6,4,0],[-2,3,5]]

#定义矩阵C,存储A+B的结果

C = [[0,0,0],[0,0,0],[0,0,0]]

#定义矩阵D,存储A-B的结果

D = [[0,0,0],[0,0,0],[0,0,0]]

遍历A矩阵的行

for i in range(len(A)):

遍历A矩阵的列

for j in range(len(A[0])):

C[i][j] = A[i][j] + B[i][j]

D[i][j] = A[i][j] - B[i][j]

print(C)

print(D)

在实际应用中,一般使用numpy对矩阵进行运算。

导入numpy模块

import numpy as np

定义矩阵

A = np.array([[-1,3,2],[5,7,-2],[-3,0,1]])

B = np.array([[8,2,-1],[6,4,0],[-2,3,5]])

矩阵运算

print(A+B)

print(A-B)

矩阵的线性变换

变换本质是一个函数,它是一个映射,它接受输入内容并输出对应结果。

例如函数:

图片

当x取不同实数时,都会有唯一对应的输出结果来对应输入的x。

对线性代数来说,变换是接受一个向量,并输出一个向量。在线性代数中,一个向量到另外一个向量的映射之所以称为变换,不称为函数,是因为考虑到了向量的变换实际是向量的运动。

如:二维空间的向量A到向量B的变换,实际是向量A通过变换移动到了向量B的位置。

A =(10,0,60.0) B=(56.6,22.3)

图片

图中向量A到向量B的变换是一种旋转变换,该变换为线性变换,它满足下面的性质。

设旋转变换为T,对线性空间V中的任意向量A和B及实数k,均有

T(A+B)= T(A)+T(B)

T(kA) = kT(A)

要验证旋转变换是否是线性变换,需要求出变换T,看变换T是否满足线性变换的两个性质。下图是二维空间向量V围绕原点逆时针旋转的示意图。

图片

如上图所示,向量V绕原点逆时针旋转θ角,得到向量V’,假设向量V=(x,y),则向量V’为:

图片

旋转变换T为:

图片

若T是线性变换,应满足线性变换的两个性质。下面我们用Python程序来验证T是线性变换。验证代码如下:

import numpy as np




# 定义向量A
A = np.array([3,2])
# 定义向量B
B = np.array([-1,5])
# 定义纯量K
k = 3.14
# 定义旋转角度
r = 30




# 定义变换T函数
# v:向量  a:旋转的角度
def T(v,a):
# 转换为弧度
a = a / 180 * np.pi
# 向量v旋转a到m
m = np.array([v[0]*np.cos(a)-v[1]*np.sin(a),
v[0]*np.sin(a)+v[1]*np.cos(a)])
return m




print("T(A+B)=T(A)+T(B):%s:%s" % (str(T(A+B,r)),str(T(A,r)+T(B,r))))
print("kT(A)=T(kA):%s:%s" % (str(k*T(A,r)),str(T(k*A,r))))

输出结果如下图所示:

图片

旋转变换T可以用矩阵表示,T也称为旋转变换矩阵:

图片

计算向量V到向量V’的转换可以使用矩阵乘法:

图片

使用矩阵乘法可以对多个二维向量组进行旋转:

图片

Python代码如下:

import numpy as np
#定义旋转矩阵T
# a:旋转角度
def T(a):
# 转换为弧度
a = a / 180 * np.pi
return np.array([
[np.cos(a),-np.sin(a)],
[np.sin(a),np.cos(a)]
])




# 定义矩阵A
# 矩阵A为待旋转的向量组
A = np.array([[3,2],
[-1,5],
[5,-2],
[2,-3],
[1,-1]
])
# 对矩阵A进行转置再相乘
C = np.matmul(T(30),np.transpose(A))
print(C)

输出结果如下图所示:

图片

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 矩阵
    +关注

    关注

    0

    文章

    406

    浏览量

    34250
  • python
    +关注

    关注

    51

    文章

    4675

    浏览量

    83467
  • 数组
    +关注

    关注

    1

    文章

    409

    浏览量

    25595
收藏 人收藏

    评论

    相关推荐

    设计IIR滤波器的双线性变换

    设计IIR滤波器的双线性变换法1、脉冲响应不变法的主要缺点:对时域的采样会造成频域的“混叠效应”,故有可能使所设计数字滤波器的频率响应与原来模拟滤波器的频率响应相差很大,而且不能用来设计高
    发表于 08-01 17:02

    模拟信号线性变换该如何设计

    设计要求:将一个-15V---+15V的模拟信号线性变换到0--5V,然后传给一个芯片,AD转换后发送给FPGA。我现在有点不明白该如何设计,倒相比例器么,还是该怎么办,希望各位大神可以指点一下~!!!!
    发表于 03-25 16:56

    如何用双线性变换法来设计数字滤波器?

    线性变换法来设计数字滤波器有哪些设计过程?
    发表于 04-12 07:13

    变换矩阵无法实现正常变换

    最近可能临近毕业,做毕业设计的同学多了,经常会有同学问我为什么在搭建仿真过程中,按照书本给出的变换矩阵无法实现正常变换?这篇文章就细致的讲一下原因。在刚开始使用matlab对电机进行建
    发表于 08-27 06:43

    滤波器设计与信号处理的MATLAB实现

    2 步模拟滤波器的设计,我们主要学习的是巴特沃斯设计方法,因此这里以“巴特沃斯滤波器双线性变换”设计法为例来阐述 IIR 滤波器的设计方法和 matlab 实现
    发表于 09-26 07:22

    用双线性变换实现IIR数字滤波器

    线性变换的频率对应关系双线性变换法虽然避免了“频率混叠效应”,但出现了模拟频率与数字频率为一种非线性的关系情形。即:可见:模拟滤波器与数字滤波器的响应在
    发表于 08-01 17:04 52次下载

    Stein方程的线性变换解法

    利用线性变换及方阵Jordan标准型的方法,给出了Stein矩阵方程存在唯一解的充分必要条件以及解的形式。采用的方法是初等的,所得的结果比已有结论丰富。该方法也可用来研究一
    发表于 12-10 17:26 9次下载

    用双线性变换法设计IIR滤波器

    用双线性变换法设计IIR滤波器一、实验目的1、了解两种工程上最常用的变换方法:脉冲响应不变法和双线性变换法。2、掌握双线性变换法设计IIR滤波器的原理及具体设计方
    发表于 05-10 09:51 48次下载

    线性变换法设计数字Butterworth和Chebyshe

    用双线性变换法设计IIR滤波器一、实验目的1、了解两种工程上最常用的变换方法:脉冲响应不变法和双线性变换法。2、掌握双线性变换法设计IIR滤波器的原理及具体设计方
    发表于 05-10 10:00 77次下载

    a稳定分布噪声中谐波恢复的非线性变换方法

    本文研究a稳定分布噪声中谐波恢复的问题。文中首先引入a稳定分布作为模拟脉冲性噪声的模型,然后采用非线性变换方法使噪声得到抑制,并证明了变换后的含噪观测值具有二阶统
    发表于 01-12 21:46 8次下载

    线性变换法中预畸变概念的补充

    现有数字信号处理教材在讲述双线性变换法中预畸变概念时略有不足,在一定程度上影响了读者对畸变、预畸变以及为什么叫预畸变等概念的理解和掌握。通过一个滤波器设计实例,较自
    发表于 04-07 11:31 23次下载

    传递函数 2.3状态空间表达式的建立 2.4线性变换

    现代控制理论-2.2传递函数 2.3状态空间表达式的建立 2.4线性变换
    发表于 12-13 22:20 0次下载

    基于Matrix矩阵变换的图形变换技巧分享

    矩阵变换在图形学上经常用到。基本的常用矩阵变换操作包括平移、缩放、旋转、斜切。每种变换都对应一个变换
    发表于 09-06 08:54 7次下载
    基于Matrix<b class='flag-5'>矩阵</b><b class='flag-5'>变换</b>的图形<b class='flag-5'>变换</b>技巧分享

    深度学习和神经网络的学习是什么样的?

    怎样理解非线性变换和多层网络后的线性可分,神经网络的学习就是学习如何利用矩阵线性变换加激活函数的非线性变换
    的头像 发表于 10-23 14:44 3775次阅读

    西门子PLC模拟量线性变换子程序的编写

    在plc编程中,只要涉及到数据采集和输出,都会遇到模拟量的线性变换。在西门子300plc编程中,系统自带的两个线性变换功能块FC105和FC106是最常用的两个数据转换模块。
    发表于 03-19 08:59 3801次阅读