【Python机器学习】实验01 Numpy以及可视化回顾

news2024/11/24 19:17:54

文章目录

  • 一、Numpy的基础知识
    • 实验1 生成由随机数组成的三通道图片,分别显示每个维度图片,并将三个通道的像素四周进行填充,分别从上下左右各填充若干数据。
  • 二、Numpy的线性代数运算
    • 实验2 请准备一张图片,按照上面的过程进行矩阵奇异分解,要求保存前50个特征值进行压缩。

一、Numpy的基础知识

  • 创建列表
import numpy as np
np.array([1,2,3])
array([1, 2, 3])
np.array([[1,2],[2,3]])
array([[1, 2],
       [2, 3]])
  • 快捷方式创建列表
np.arange(1,10),np.arange(10,1,-1)
(array([1, 2, 3, 4, 5, 6, 7, 8, 9]),
 array([10,  9,  8,  7,  6,  5,  4,  3,  2]))
range(10,1,-1)
range(10, 1, -1)
np.linspace(1,10,5)
array([ 1.  ,  3.25,  5.5 ,  7.75, 10.  ])
np.zeros((2,2))
array([[0., 0.],
       [0., 0.]])
np.ones((1,1))
array([[1.]])
np.diag([1,2])
array([[1, 0],
       [0, 2]])
  • 采用随机数生成数组
import numpy.random as rd
rd.uniform(2,3,[3,4])
array([[2.00870568, 2.84081335, 2.56773483, 2.31232497],
       [2.4091653 , 2.22513678, 2.62473312, 2.20786884],
       [2.8608431 , 2.04426497, 2.73712184, 2.73669482]])
rd.random((1,3))
array([[0.33035627, 0.1179577 , 0.68061576]])
rd.normal(2,6,(2,4))
array([[ 5.6250594 ,  8.07709039,  1.92724817, -4.75702484],
       [-1.71722434,  2.69880337, -6.20162398, -0.62033363]])
  • 利用随机数生成图片
import numpy as np
import numpy.random as rd
import matplotlib.pyplot as plt
plt.figure(figsize=(2,2))
img=rd.randint(0,255,(10,10))
plt.imshow(img)
<matplotlib.image.AxesImage at 0x243604a2250>

1

arr1=rd.randn(1,3)
arr1.astype("float32")
array([[ 0.47883075, -0.5455359 , -1.2719026 ]], dtype=float32)
  • 数组常见属性
arr1.shape,arr1.T,arr1.dtype,arr1.ndim
((1, 3),
 array([[ 0.47883076],
        [-0.54553593],
        [-1.27190261]]),
 dtype('float64'),
 2)
  • 数组的访问
arr=np.arange(1,10).reshape(3,3)
arr
array([[1, 2, 3],
       [4, 5, 6],
       [7, 8, 9]])
plt.figure(figsize=(2,2))
plt.imshow(arr)
<matplotlib.image.AxesImage at 0x24360c1ed00>

2

arr[:2,:2]
array([[1, 2],
       [4, 5]])
arr[[0,2],:2]
array([[1, 2],
       [7, 8]])
arr.T
plt.figure(figsize=(2,2))
plt.imshow(arr.T)
<matplotlib.image.AxesImage at 0x24360c78af0>

3

arr[::-1,]
plt.figure(figsize=(2,2))
plt.imshow(arr[::-1,])
<matplotlib.image.AxesImage at 0x24360ccdd30>

4

arr[::-1,].T
plt.figure(figsize=(2,2))
plt.imshow(arr[::-1,].T)
<matplotlib.image.AxesImage at 0x24360d24e20>

5

arr.T[::-1,]
plt.figure(figsize=(2,2))
plt.imshow(arr.T[::-1,])
<matplotlib.image.AxesImage at 0x24360d78a30>

6

arr.T[::,::-1]
plt.figure(figsize=(2,2))
plt.imshow(arr.T[::,::-1])
<matplotlib.image.AxesImage at 0x24360dcc730>

7

  • 可视化2*2像素的一张图
import matplotlib.pyplot as plt
plt.figure(figsize=(2,2))
plt.imshow([[0,1],[1,0]])
<matplotlib.image.AxesImage at 0x24360e24340>

8

  • 数组的应用np.insert,np.concatenate,np.stack,np.tile
from scipy import misc
plt.figure(figsize=(2,2))
img = misc.face()
plt.imshow(img)
<matplotlib.image.AxesImage at 0x24360ef4be0>

9

img.shape
(768, 1024, 3)
plt.figure(figsize=(2,2))
plt.imshow(img[:,:512,:])
<matplotlib.image.AxesImage at 0x24361197ca0>

10

plt.figure(figsize=(2,2))
plt.imshow(img[:384,:,:])
<matplotlib.image.AxesImage at 0x2436131cd00>

11

plt.figure(figsize=(2,2))
plt.imshow(img[:,:,2])
<matplotlib.image.AxesImage at 0x2436149bcd0>

12

img_r=img[:,:,2]
plt.figure(figsize=(2,2))
plt.imshow(img_r[::-1,:])
<matplotlib.image.AxesImage at 0x243614f7250>

13

img_r=img[:,:,2]
plt.figure(figsize=(2,2))
plt.imshow(img_r[::,::-1])
<matplotlib.image.AxesImage at 0x2436154b4c0>

14

img_new=np.insert(img_r,0,img_r[:50],axis=0)
plt.figure(figsize=(2,2))
plt.imshow(img_new)
<matplotlib.image.AxesImage at 0x2436159b790>

15

img_new=np.insert(img_r,0,img_r[:,:100].T,axis=1)
plt.figure(figsize=(2,2))
plt.imshow(img_new)
<matplotlib.image.AxesImage at 0x243615f0f40>

16

plt.figure(figsize=(2,2))
plt.imshow(np.concatenate([img_r,img_r],axis=1))
<matplotlib.image.AxesImage at 0x24362a74c10>

17

plt.figure(figsize=(2,2))
plt.imshow(np.concatenate([img_r,img_r],axis=0))
<matplotlib.image.AxesImage at 0x243628f9be0>

18

plt.figure(figsize=(2,2))
plt.imshow(np.stack([img_r,img_r],axis=0)[0])
<matplotlib.image.AxesImage at 0x2436294cdf0>

19

实验1 生成由随机数组成的三通道图片,分别显示每个维度图片,并将三个通道的像素四周进行填充,分别从上下左右各填充若干数据。

程序设计

#利用随机数生成图片
import numpy as np
import numpy.random as rd
import matplotlib.pyplot as plt
fig=plt.figure(figsize=(4,4))

#四张子图
ax1=fig.add_subplot(221)
ax2=fig.add_subplot(222)
ax3=fig.add_subplot(223)
ax4=fig.add_subplot(224)

#用随机数数组填充子图
img=rd.randint(0,255,(10,10))
ax1.imshow(img)
ax2.imshow(img) 
ax3.imshow(img)  
ax4.imshow(img)  

#从上方填充
img1=np.insert(img,0,img[0,:],axis=0)
ax1.imshow(img1)

#从下面填充
img2=np.insert(img,-1,img[-1,:],axis=0)
ax2.imshow(img2)

#从左边填充
img3=np.insert(img,0,img[:,0],axis=1)
ax3.imshow(img3)

#从右边填充
img4=np.insert(img,-1,img[:,-1],axis=1)
ax4.imshow(img4)

plt.tight_layout()
plt.show()

20

具体分析

这段代码是利用随机数生成图片,并在将图片填充到四个子图中展示。以下是代码的具体分析:

  1. 导入numpy库,用于生成随机数和操作数组;导入matplotlib库,用于绘制图像。
  2. 创建一个大小为4x4的Figure对象,即一个包含4个子图的画布。
  3. 使用add_subplot()函数创建四个子图对象ax1、ax2、ax3和ax4。
  4. 使用randint()函数生成一个10x10的随机数数组img,并将其作为参数传递给imshow()函数并分别绘制到四个子图上。
  5. 从上方填充子图1(ax1):使用insert()函数在数组img的第一行之前插入第一行,并将结果赋给img1。然后使用imshow()函数在子图1上展示img1。
  6. 从下方填充子图2(ax2):使用insert()函数在数组img的倒数第一行之前插入最后一行,并将结果赋给img2。然后使用imshow()函数在子图2上展示img2。
  7. 从左边填充子图3(ax3):使用insert()函数在数组img的第一列之前插入第一列,并将结果赋给img3。然后使用imshow()函数在子图3上展示img3。
  8. 从右边填充子图4(ax4):使用insert()函数在数组img的倒数第一列之前插入最后一列,并将结果赋给img4。然后使用imshow()函数在子图4上展示img4。
  9. 使用tight_layout()函数调整子图的布局,使其适应画布。
  10. 使用show()函数显示画布和子图。

二、Numpy的线性代数运算

import numpy.linalg as la
arr1=np.arange(1,5).reshape(2,2)
arr1
array([[1, 2],
       [3, 4]])
la.det(arr1)
-2.0000000000000004
la.inv(arr1)
array([[-2. ,  1. ],
       [ 1.5, -0.5]])
arr1@la.inv(arr1)
array([[1.00000000e+00, 1.11022302e-16],
       [0.00000000e+00, 1.00000000e+00]])
np.dot(arr1,la.inv(arr1))
array([[1.00000000e+00, 1.11022302e-16],
       [0.00000000e+00, 1.00000000e+00]])
#矩阵奇异分解
U,s,V=la.svd(arr1)
U,s,V
(array([[-0.40455358, -0.9145143 ],
        [-0.9145143 ,  0.40455358]]),
 array([5.4649857 , 0.36596619]),
 array([[-0.57604844, -0.81741556],
        [ 0.81741556, -0.57604844]]))

注意, s是个对角方阵,这里用一维数组做了简写。
np.diag(s) 是其本该有的样子。

#重构矩阵
U@np.diag(s)@V
array([[1., 2.],
       [3., 4.]])
plt.figure(figsize=(2,2))
plt.imshow(img_r,cmap="hot")
<matplotlib.image.AxesImage at 0x24362cde2b0>

21

U,s,V=la.svd(img_r)
U.shape,s.shape,V.shape
((768, 768), (768,), (1024, 1024))
#重构图像
S=np.zeros((U.shape[1],V.shape[0]))
np.fill_diagonal(S,s)
S.shape
(768, 1024)
plt.imshow(U@S@V)
<matplotlib.image.AxesImage at 0x24362d45160>

22

#只用一部分来重构图像
k=500
appro_imag=U@S[:,:20]@V[:20,:]
plt.imshow(appro_imag)
<matplotlib.image.AxesImage at 0x2436554cdc0>

23

结论: 使用奇异值分解可以获得图像的近似表示。此技术可以用于图像压缩或者,图像的主成分分析。

appro_imag.shape
(768, 1024)

实验2 请准备一张图片,按照上面的过程进行矩阵奇异分解,要求保存前50个特征值进行压缩。

程序设计

from PIL import Image
image = misc.ascent()
plt.imshow(image)
<matplotlib.image.AxesImage at 0x243661b3340>

24

U,s,V=la.svd(image)
U.shape,s.shape,V.shape
S=np.zeros((U.shape[1],V.shape[0]))
np.fill_diagonal(S,s)
k=50
appro_imag=U@S[:,:k]@V[:k,:]
plt.imshow(appro_imag)
<matplotlib.image.AxesImage at 0x2436348dc10>

25
具体分析

这段代码使用了PIL库中的Image模块,通过其ascent()函数生成了一个图像。然后使用numpy和scipy的线性代数函数对图像进行奇异值分解(SVD)处理。以下是代码的具体分析:

  1. 导入PIL库中的Image模块。
  2. 使用ascent()函数生成一个图像image。
  3. 使用numpy的线性代数函数la.svd()对图像进行奇异值分解,将结果分别赋给U、s和V三个变量。
  4. 使用U.shape、s.shape和V.shape分别获得U、s和V的形状(维度)信息,并输出。
  5. 创建一个全零矩阵S,其行数为U的列数,列数为V的行数。
  6. 使用numpy的fill_diagonal()函数将s数组中的元素按对角线方向填充到S矩阵之中,通过对角线填充的方式将奇异值转化为奇异值矩阵。
  7. 设置一个参数k为50,表示提取前k个奇异值和对应的奇异向量。
  8. 使用U、S和V的切片操作,分别选取前k列的奇异向量和前k行的奇异值矩阵,并通过矩阵乘法运算得到近似图像。
  9. 使用plt的imshow()函数将近似图像显示出来。

总体而言,这段代码是对图像进行奇异值分解,并根据提取到的奇异值和奇异向量重构了一个近似图像,并将其显示出来。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/785502.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

磁场强度单位和磁感应强度单位转换

磁学量常用单位换算 、磁场强度单位和磁感应强度单位转换。 磁场单位 Oe&#xff08;奥斯特&#xff09;,A/m,T&#xff08;特斯拉&#xff09;三种. 1T1000mT 1mT10Gs 1Gs79.6A/m 1T(特斯拉)10000Gs(高斯)1Wb/M2 1Gs(高斯)1Oe(奥斯特)

C#实现系统进程的调用,查看进程调用的模块

1.需要使用命名空间&#xff1a;System.Diagnostics; 2.Process.GetProcess()可以获取所有进程 3.获取进程调用的模块 ProcessModuleCollection modules currentProcess.Modules; foreach循环一下FileName就可以查看调用了什么dll文件了 4.有关进程的信息&#xff08;Process…

最新基于Citespace、vosviewer、R语言文献计量学可视化分析技术及全流程文献可视化SCI论文高效写作方法

目录 专题一 文献计量学方法与应用简介 专题二 主题确定、检索与数据采集 专题三 VOSviewer可视化绘图精讲 专题四 Citespace可视化绘图精讲 专题五 R语言文献计量学绘图分析 专题六 论文写作 专题七 论文投稿 文献计量学是指用数学和统计学的方法&#xff0c;定量地分析…

线性神经网络——softmax 回归随笔【深度学习】【PyTorch】【d2l】

文章目录 3.2、softmax 回归3.2.1、softmax运算3.2.2、交叉熵损失函数3.2.3、PyTorch 从零实现 softmax 回归3.2.4、简单实现 softmax 回归 3.2、softmax 回归 3.2.1、softmax运算 softmax 函数是一种常用的激活函数&#xff0c;用于将实数向量转换为概率分布向量。它在多类别…

基于STM32F10x的独立按键测试

本人基于野火指南者开发板&#xff0c;使用FreeRTOS,创建按键任务。 在按键任务里面每隔20毫秒扫描一下按键。包括独立按键&#xff0c;矩阵按键(由于本人没有矩阵按键&#xff0c;故没有测试)。 按键40毫秒以上为短按、1秒以上则为长按、3秒以上则为一直按。且长按10秒以上则…

网络安全(黑客)自学基础到高阶路线

01 什么是网络安全 网络安全可以基于攻击和防御视角来分类&#xff0c;我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术&#xff0c;而“蓝队”、“安全运营”、“安全运维”则研究防御技术。 无论网络、Web、移动、桌面、云等哪个领域&#xff0c;都有攻与防两面…

Docker + MYSQL 启动nacos

Docker启动nacos默认用的是内存数据库&#xff0c;重启docker容器以后&#xff0c;nacos配置会丢失&#xff0c;非常不方便。所以需要修改为使用Mysql作为nacos的存储。 1.数据库 创建mysql数据库&#xff0c;过程省略&#xff0c;将nacos 的mysql脚本在数据库中进行导入。 m…

北航投资已投企业四象科技成功发射三颗卫星

1箭4星&#xff01;2023年7月23日10时50分&#xff0c;我国在太原卫星发射中心使用长征二号丁运载火箭&#xff0c;成功将四象科技“矿大南湖号”SAR遥感卫星、“虹口复兴号”光学遥感卫星、“中电农创号”热红外遥感卫星以及银河航天灵犀03星共4颗卫星发射升空&#xff0c;卫星…

当机器人变硬核:探索深度学习中的时间序列预测

收藏自&#xff1a;Wed, 15 Sep 2021 10:32:56 UTC 摘要&#xff1a;时间序列预测是机器学习和深度学习领域的一个重要应用&#xff0c;它可以用于预测未来趋势、分析数据模式和做出决策。本文将介绍一些基本概念和常用方法&#xff0c;并结合具体的案例&#xff0c;展示如何使…

7D透明屏的市场应用广泛,在智能家居中有哪些应用表现?

7D透明屏是一种新型的显示技术&#xff0c;它能够实现透明度高达70%以上的显示效果。这种屏幕可以应用于各种领域&#xff0c;如商业广告、展览展示、智能家居等&#xff0c;具有广阔的市场前景。 7D透明屏的工作原理是利用光学投影技术&#xff0c;将图像通过透明屏幕投射出来…

VMware 创建Centos7虚拟机后nat模式无法联网

1. 网卡改为on&#xff0c;dhcp模式&#xff0c;重启网卡&#xff0c;如果还是无法联网 2.修改 /etc/resolv.conf&#xff0c;增加DNS 223.5.5.5,保存后即可ping 通百度&#xff0c;联网。在此记录一下

SolVES模型安装教程

前文是关于SolVES模型扫盲&#xff0c;熟悉SolVES模型的伙伴可直接跳到下面的安装教程。 目前生态系统服务评估主要集中于经济价值&#xff0c;相关的评估方法也较多&#xff0c;如价值当量法、InVEST模型法、市场价格法等&#xff0c;而随着生态系统服务的社会价值得到越多越…

firefox笔记-Centos7离线安装firefox

目前&#xff08;2023-03-22 16:41:35&#xff09;Centos7自带的firefox已经很新了是2020年的。主要原因是有个web项目&#xff0c;用2020年的firefox打不开。 发到互联网上是2023-07-24。 报错是js有问题&#xff0c;估计是搞前端的只做了chrome适应&#xff0c;没做firefox…

将数据转二进制流文件,用PostMan发送二进制流请求

一、将byte数组转二进制流文件&#xff0c;并保存到本地 byte [] oneshotBytesnew byte[]{78,-29,51,-125,86,-105,56,82,-94,-115,-22,-105,0,-45,-48,-114,27,13,38,45,-24,-15,-13,46,88,-90,-66,-29,52,-23,40,-2,116,2,-115,17,36,15,-84,88,-72,22,-86,41,-90,-19,-58,19…

Docker 的数据管 与 Dockerfile

目录 Docker 的数据管理容器互联&#xff08;使用centos镜像&#xff09;Docker 镜像的创建1&#xff0e;基于现有镜像创建2&#xff0e;基于本地模板创建3&#xff0e;基于Dockerfile 创建镜像加载原理 Dockerfile 操作常用的指令&#xff08;1&#xff09;FROM 镜像&#xff…

平台使用篇 | RflySim平台Simulink-PSP工具箱使用简介

导读 Pixhawk Pilot Support Package (PSP,自驾仪支持包)工具箱是Mathworks公司官方为Pixhawk推出的一个工具箱。本篇围绕RflySim平台Simulink-PSP工具箱使用进行详解。 RflySim平台Simulink-PSP工具箱使用简介 PSP工具箱 Pixhawk Pilot Support Package (PSP,自驾仪支持包)工…

显卡水洗充新、冒牌作坊彻底凉凉,1500万销量团伙被一锅端

上一轮显卡挖矿潮自 2020 年底开始&#xff0c;直到 2022 年底尾声&#xff0c;历时两年左右。 在这一波矿潮冲击过后&#xff0c;大量水洗、二手矿卡横行&#xff0c;显卡市场可谓一片混乱。 翻新、杂牌显卡厂商表示&#xff1a;就挺突然的&#xff0c;感觉人生到达了巅峰&a…

某奇艺缺陷书写规范及缺陷严重程度划分

目录 一、最基本的要求&#xff1a; 二、Bug标题 三、复现步骤 四、描述 五、期望结果 六、实际结果 七、附件 八、备注 九、Bug定级&#xff08;优先级&#xff09; Bug书写规范&#xff1a; 一、最基本的要求&#xff1a; 1、Bug内所有的文字表述要通顺&#xff0c…

最新!王中林院士再获全球大奖:“开创让西方跟随的研究领域”

最新&#xff01;王中林院士再获全球大奖&#xff1a;“开创让西方跟随的研究领域” 北京时间7月6日下午17:00&#xff0c;2023年度“全球能源奖”&#xff08;Global Energy Prize&#xff09;揭晓&#xff0c;中国科学院北京纳米能源与系统研究所首席科学家王中林院士因发明摩…

Debug Stable Diffusion webui

文章目录 SD前期预备一些惊喜TorchHijackForUnet Txt2Img 搭配 Lora 使用单独运行 txt2img.py获取所有资源代码地址参数sd model 主程序代码地址参数(同上)模型InferenceLORA应用重构并使用LORA模型用Lora重构后的网络 做 sampler后处理 以下内容是最近的学习笔记&#xff0c;如…