IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 线性代数(基于python)基于矩阵变换的图像变化交流 -> 正文阅读

[Python知识库]线性代数(基于python)基于矩阵变换的图像变化交流

  1. 问题:鸡兔同笼,10个头,28只脚,问鸡兔各有多少只
  2. 解答:列二元一次方程,鸡x只,兔有y只

x+y=10
2x+4y=28

  1. 线性方程组
在这里插入代码片
import numpy as np
A=np.array([[1,1],[2,4]])#将系数所有向量拼在一起
b=np.array([10,28])#常数向量
x=np.linalg.solve(A,b)
print('线性方程组的解为:',x)

D:\why\python.exe D:/opencv-python/xianxingdaishu.py
线性方程组的解为: [6. 4.]

4.问题:后来又引入了公鸡和鸭子,之后共14头,40脚,眼睛28,问鸡兔鸭各有几只
假设鸭z只
方程组:
x+y+z=14
2x+4y+2z=40
2x+2y+2z=28(没用的)
5、插入:生成向量,向量加法,数乘

import numpy as np
x=np.array([1,2,3])
y=np.array([4,5,6])
print("x={},y={}".format(x,y))
print('x的维度为{}'.format(x.shape))#shape显示向量的维度,如果是向量默认只有一维,维度显示为(dim,)

print('x+y={]'.format(x+y))
k=3
print('kx={}'.format(k*x))
print('3x+2y={}'.format(3*x+2*y))



D:\why\python.exe D:/opencv-python/xianxingdaishu.py
x=[1 2 3],y=[4 5 6]
x的维度为(3,)
x+y=[5 7 9]
kx=[3 6 9]
3x+2y=[11 16 21]

判断一个方程有唯一解:

  • n个未知数有n个方程
  • 行列式不等于0

6.插入:行列式

import numpy as np
A=np.array([[1,1,1],[2,4,2],[2,2,2]])
A_det=np.linalg.det(A)#计算行列式
print('A的行列式值为',A_det)
B=np.array([[1,1,1,1],[1,2,0,0],[1,0,3,0],[1,0,0,4]])
B_det=np.linalg.det(B)
print('B的行列式值为',B_det)

D:\why\python.exe D:/opencv-python/jj.py
A的行列式值为 0.0
B的行列式值为 -2.0

7、克莱默法则
结论:2阶行列式是由2维向量组成的,结果为已这两个向量为邻边的平行四边形面积

import numpu as np
D=np.array([[2.,1,-5,1],[1,-3,0,-6],[0,2,-1,2],[1,4,-7,6]])
D_det=np.linalg.det(D)


D1=np.array([[8.,1,-5,1],[9,-3,0,-6],[-5,2,-1,2],[0,4,-7,6]])
D1_det=np.linalg.det(D1)

D2=np.array([[2.,8,-5,1],[1,9,0,-6],[0,-5,-1,2],[1,0,-7,6]])
D2_det=np.linalg.det(D2)

D3=np.array([[2.,1,8,1],[1,3,9,-6],[0,2,-15,2],[1,4,0,6]])
D1_det=np.linalg.det(D3)

D4=np.array([[2.,1,-5,8],[1,-3,0,9],[0,2,-1,-5],[1,4,-7,0]])
D4_det=np.linalg.det(D4)

x1=D1_det/D_det
x2=D2_det/D_det
x3=D3_det/D_det
x4=D4_det/D_det
print('克莱姆法则解线性微分方程组的解为\n x1={:.2f},\n x2={:.2f},\n  x3={:.2f},\n  x4={:.2f}'.format(x1,x2,x3,x4))

8、矩阵

import numpy as np
A=np.array([[1,2],[1,-1]])
B=np.array([[1,2,-3],[-1,1,2]])
print('A规模{}'.format(A.shape))
print('B规模{}'.format(B.shape))

print('AB=\n{}'.format(np.matmul(A,B)))

8.1单位矩阵

import numpy as np
print('B=\n',B,'\n','E=\n',np.eye(3))#3阶单位阵
np.matmul(B,np.eye(3))

8.2初等矩阵

import numpy as np
A=np.array([[1,1,1],[2,4,2]])
print('A=\n',A)

8.3交换矩阵的两行

import numpy as np
A=np.array([[0,1],[1,0]])
np.matmul(P,A)

8.4`逆矩阵

import numpy as np
A=np.array([[1,0,0],[0,2,0],[0,0,3]])
np.matmul(A,A)
import numpy as np
B=np.array([[0,1],[0,-1]])
print(np.linalg.det(B),'行列式为0,奇异阵')#检查是否奇异
print(np.linalg.pinv(B))
print(np.matul(np,matmul(B,np,linalg.pinv(B)),B))#验证广义逆的定义

注意:向量在空间中的位置是绝对的,而其坐标值却是相对的,坐标的取值依托于所选取的坐标向量(基底)

8.5对角矩阵
并不是所有的矩阵都能相似于对角矩阵

8.6特征值,特征向量,对角化

import numpy as np
A=np.array([[-2,1,1],[0,2,0],[-4,1,3]])
lamb,p=np.linalg.eig(A)
print(lamb)#特征值
print(p)#特征向量
print(np.matmul(np.linalg.inv(p),np.matmul(A,p)))

8.7数值过滤

import numpy as np
res=np.matmul(np.linalg.inv(p),np.matmul(A,p))
res[np.abs(res)<1e-6]=0
print(res)

8.8施密特正交化

import numpy as np
from scipy.linalg import*
A=np.array([[1,2,3],[2,1,3],[3,2,1]])
B=orth(A)#正交化,奇异值分解不是施密特正交化
print(np.matmul(B,np.transpose(B))#输出单位矩阵
res=np.matmul(B,np.transpose(B)
res[np.abs(res)<1e-6]=0
print(res)

9.项目实战–基于矩阵变换的图像变换

import numpy as np
from math import cos,sin,pi
 
def vec_2d(x0,y0,alpha):
    #alpha旋转的角度,弧度制
    origin=np.array([[x0,y0,1]])
    Transnp.array([[cos(alpha),-sin(alpha),0],[sin(alpha),cos(alpha),0],[0,0,1]])
    res=origin.dot(Trans)
    x=#___
    y=#————
    return (x,y)
    #图像旋转
    def Trans(x0,y0,W,H,alpha):
    origin=np.array([x0,y0,1])
    res = origin.dot(np.array[[cos(alpha),0],
                              [-sin(alpha),cos(alpha),0],
                              [-0.5*W*cos(alpha)+0.5*H*sin(alpha)+0.5*W,
                               -0.5*W*sin(alpha)-0.5*H*cos(alpha)+
                               0.5*H,1]])
    return (int(res[0,:2][0]),int(res[0,:2][1]))

from skimage import io,data
imgs=data.horse()
io.imshow(img3)
img3.shape

img4=np.zeros((400,400))
for x in range(img3.shape[0]):
    for y in range(img3.shape[1]):
        x1,y1=Trans(x,y,328,400,pi/2)
        img4[x1-355,y1]=img3[x,y]#355只是做了一步平移居中,保证画面完整性
        io.imshow(img4)

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-06-25 18:04:45  更:2022-06-25 18:04:55 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/18 14:40:55-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码