Scipy简介

article/2025/8/23 1:24:40

Scipy简介

  • Scipy依赖于Numpy
  • Scipy包含的功能:最优化、线性代数、积分、插值、拟合、特殊函数、快速傅里叶变换、信号处理、图像处理、常微分方程求解器等
  • 应用场景:Scipy是高端科学计算工具包,用于数学、科学、工程学等领域
  • Scipy由一些特定功能的子模块组成:
    在这里插入图片描述

图片消噪处理

  • scipy.fftpack模块用来计算快速傅里叶变换
    速度比传统傅里叶变换更快,是对之前算法的改进
    图片是二维数据,注意使用fftpack的二维转变方法
from scipy.fftpack import fft2, ifft2
import matplotlib.pyplot as plt
%matplotlib inline
import numpy as np
#读取照片数据
moon = plt.imread('moonlanding.png')	==>
array([[ 0.04705882,  0.        ,  0.23921569, ...,  0.        ,0.00392157,  0.53333336],[ 0.        ,  0.        ,  0.67843139, ...,  0.10196079,0.29019609,  0.        ],[ 0.72156864,  0.10980392,  0.60392159, ...,  0.        ,0.21568628,  1.        ],..., [ 0.00392157,  0.        ,  1.        , ...,  1.        ,1.        ,  0.95686275],[ 0.        ,  0.        ,  0.15686275, ...,  0.        ,0.        ,  0.35294119],[ 1.        ,  0.52156866,  0.04705882, ...,  0.        ,0.        ,  1.        ]], dtype=float32
#数据形式 
moon.shape		==> (474, 630)
#展示图片
plt.imshow(moon, cmap='gray')
#cmap 指定RGB的Z值,如果是三维数组则忽略cmap值
# 可选择的颜色映射参数为:Accent, Accent_r, Blues, Blues_r, BrBG, BrBG_r, BuGn, BuGn_r, BuPu, BuPu_r, CMRmap, CMRmap_r, Dark2, Dark2_r, GnBu, GnBu_r, Greens, Greens_r, Greys, Greys_r, OrRd, OrRd_r, Oranges, Oranges_r, PRGn, PRGn_r, Paired, Paired_r, Pastel1, Pastel1_r, Pastel2, Pastel2_r, PiYG, PiYG_r, PuBu, PuBuGn, PuBuGn_r, PuBu_r, PuOr, PuOr_r, PuRd, PuRd_r, Purples, Purples_r, RdBu, RdBu_r, RdGy, RdGy_r, RdPu, RdPu_r, RdYlBu, RdYlBu_r, RdYlGn, RdYlGn_r, Reds, Reds_r, Set1, Set1_r, Set2, Set2_r, Set3, Set3_r, Spectral, Spectral_r, Vega10, Vega10_r, Vega20, Vega20_r, Vega20b, Vega20b_r, Vega20c, Vega20c_r, Wistia, Wistia_r, YlGn, YlGnBu, YlGnBu_r, YlGn_r, YlOrBr, YlOrBr_r, YlOrRd, YlOrRd_r, afmhot, afmhot_r, autumn, autumn_r, binary, binary_r, bone, bone_r, brg, brg_r, bwr, bwr_r, cool, cool_r, coolwarm, coolwarm_r, copper, copper_r, cubehelix, cubehelix_r, flag, flag_r, gist_earth, gist_earth_r, gist_gray, gist_gray_r, gist_heat, gist_heat_r, gist_ncar, gist_ncar_r, gist_rainbow, gist_rainbow_r, gist_stern, gist_stern_r, gist_yarg, gist_yarg_r, gnuplot, gnuplot2, gnuplot2_r, gnuplot_r, gray, gray_r, hot, hot_r, hsv, hsv_r, inferno, inferno_r, jet, jet_r, magma, magma_r, nipy_spectral, nipy_spectral_r, ocean, ocean_r, pink, pink_r, plasma, plasma_r, prism, prism_r, rainbow, rainbow_r, seismic, seismic_r, spectral, spectral_r, spring, spring_r, summer, summer_r, tab10, tab10_r, tab20, tab20_r, tab20b, tab20b_r, tab20c, tab20c_r, terrain, terrain_r, viridis, viridis_r, winter, winter_r# 傅里叶变换消噪# 把时域空间转换到频域空间
f_moon = fft2(moon)#关键步骤,过滤条件必须写好
# 在频域空间对高幅度的波进行过滤
f_moon[f_moon>3e2] = 0# 把频域空间转回到时域空间
if_moon = np.real(ifft2(f_moon))#展示
plt.imshow(if_moon, cmap="gray")

傅里叶级数转换介绍

  • 图片灰度处理
    用二维数组展示的图片,没有RGB三原色,只有一个灰度值
# 利用数组随机数生成一个图片
data = np.random.randint(0,255,size=(1000,1000,3))# astype 用来转换数组中数据的类型
plt.imshow(data.astype(np.uint8))

在这里插入图片描述

  • jpg图像和png图像的区别
    • jpg图像 3个0-255之间的uint8类型整数来表示颜色
    • png图像 3个0-1之间的float32类型小数来表示颜色
back = plt.imread('back.jpg')
back.shape  ==>	(506, 900, 3)
back.dtype ==>dtype('uint8')
back.max(), back.min()  ==>(255, 0)
#取最大值或最小值
back.max(axis=2).shape 
plt.imshow(back.max(axis=2))
#取平均值
plt.imshow(back.mean(axis=2))
#用点乘积引入权重
weight = np.array([0.3,0.4,0.3])
plt.imshow(np.dot(back, weight), cmap="gray")

原照片
原照片
处理后
灰度处理后

高数积分

  • 使用 数值积分,求解圆周率
# 使用scipy.integrate进行积分,调用quad()方法
#定义圆函数
f = lambda x : (1-x**2)**0.5
#对积分区间切分
x = np.linspace(-1,1,100)
y = f(x)
#定义图像大小
plt.figure(figsize=(4,4))
#使图像横轴纵轴比例一致
plt.axis("equal")
#指定x、y的值域区间
plt.plot(x, y)
plt.plot(x, -y)# 求不规则图形的面积
from scipy.integrate import quad
area, err = quad(f, a, b)	得到面积和误差==>
(1.5707963267948986, 1.0002356720661965e-09)
#用s/r^2得到圆周率
area*2/1**2		==>3.141592653589797

利用积分绘制的圆

Scipy文件输入/输出

scipy.io

import scipy.io as io

随机生成数组,使用scipy中的io.savemat()保存
文件格式是.mat,标准的二进制文件

import scipy.io as scio使用io.savemat()保存图片,数据必须用字典格式
#scio.savemat(file_name, mdict, appendmat=True, format='5', long_field_names=False, do_compression=False, oned_as='row')
scio.savemat('back.mat',{"data":back})使用io.loadmat()读取数据
# scio.loadmat(file_name, mdict=None, appendmat=True, **kwargs)
scio.loadmat('back.mat')["data"]#展示数据
plt.imshow(scio.loadmat('back.mat')["data"])

输出图片

scipy.misc

  • misc.imread()/imsave() 读写图片
from scipy import misc
#读取照片数据
#misc.imread(name, flatten=False, mode=None)
back = misc.imread('back.jpg')#写入文件, misc.imsave(name, arr, format=None)
data = np.random.randint(0,255,size=(100,100,3))
# numpy series
data = data.astype(np.uint8)
misc.imsave('data.jpg', data)#展示保存图片
plt.imshow(misc.imread('data.jpg'))
  • misc的rotate、resize、imfilter操作
# 旋转图片
#1.读取照片数据(系统自带的照片),face = misc.face(gray=True)
face = misc.face(gray=True)
#2.展示 misc.imrotate(arr, angle, interp='bilinear')
plt.imshow(misc.imrotate(face, angle=70))# 改变照片大小,misc.imresize(arr, size, interp='bilinear', mode=None)
#1.size使用0-1之间的小数,表示的是分数比
plt.imshow(misc.imresize(face, size=0.5))
#2.size使用整数,表示的是百分比
plt.imshow(misc.imresize(face, size=50))
#3.size使用元组,表示两个方向保留的像素点个数,取值是等间距取值
plt.imshow(misc.imresize(face, size=(30,60)))#滤镜	Signature: misc.imfilter(arr, ftype)
# ftype的取值:'blur', 'contour', 'detail', 'edge_enhance', 'edge_enhance_more','emboss', 'find_edges', 'smooth', 'smooth_more', 'sharpen'.
plt.imshow(misc.imfilter(face, "emboss"),cmap="gray")

使用scipy.ndimage图片处理

使用scipy.misc.face(gray=True)获取图片,使用ndimage移动坐标、旋转图片、切割图片、缩放图片

from scipy import ndimage# 1.shift移动坐标
'''ndimage.shift(input, shift, output=None, order=3, mode='constant', cval=0.0, prefilter=True)
mode(移动图片后空余部分的填充方式) 可选参数 'constant', 'nearest', 'reflect', 'mirror' or 'wrap'
shift 移动的范围,给定的数值是float则x,y移动相同距离,也可以给定一个列表'''
plt.imshow(ndimage.shift(face,shift=200,mode="constant"), cmap="gray")
plt.imshow(ndimage.shift(face,shift=[100,100],mode="mirror"))# rotate旋转图片
'''
ndimage.rotate(input, angle, axes=(1, 0), reshape=True, output=None, order=3, mode='constant', cval=0.0, prefilter=True)
'''
plt.imshow(ndimage.rotate(face, angle=60))# zoom缩放图片
'''ndimage.zoom(input, zoom, output=None, order=3, mode='constant', cval=0.0, prefilter=True)zoom接受一个比例列表,表示不同的轴上的比值
'''
plt.imshow(ndimage.zoom(face,zoom=0.5))
plt.imshow(ndimage.zoom(face,zoom=[0.3,2]))
  • 图片进行过滤
    添加噪声,对噪声图片使用ndimage中的高斯滤波、中值滤波、signal中维纳滤波进行处理
    使图片变清楚
# 加载图片,使用灰色图片misc.face()添加噪声
moon = plt.imread('moonlanding.png')
plt.imshow(moon, cmap="gray")#gaussian高斯滤波参数sigma:高斯核的标准偏差
'''
ndimage.gaussian_filter(input, sigma, order=0, output=None, mode='reflect', cval=0.0, truncate=4.0)
'''
plt.imshow(ndimage.gaussian_filter(moon, sigma=0.8), cmap="gray")#median中值滤波
'''
ndimage.median_filter(input, size=None, footprint=None, output=None, mode='reflect', cval=0.0, origin=0)
参数size:给出在每个元素上从输入数组中取出的形状位置,定义过滤器功能的输入
'''
plt.imshow(ndimage.median_filter(moon, size=6), cmap="gray")#signal维纳滤波
'''
signal.wiener(im, mysize=None, noise=None)
参数mysize:滤镜尺寸的标量
'''
import scipy.signal as signal
plt.imshow(signal.wiener(moon, mysize=6), cmap="gray")

pandas绘图函数

Series和DataFrame都有一个用于生成各类图表的plot方法。默认情况下,它们所生成的是线形图

  • matplotlib来绘制
  • 格式: s.plot(kind=‘line’, ax=None, figsize=None, use_index=True, title=None, grid=None, legend=False, style=None, logx=False, logy=False, loglog=False, xticks=None, yticks=None, xlim=None, ylim=None, rot=None, fontsize=None, colormap=None, table=False, yerr=None, xerr=None, label=None, secondary_y=False, **kwds)
    • 参数kind用来指定绘制图像类型:
      • ‘line’ : line plot (default)
      • ‘bar’ : vertical bar plot
      • ‘barh’ : horizontal bar plot
      • ‘hist’ : histogram
      • ‘box’ : boxplot
      • ‘kde’ : Kernel Density Estimation plot
      • ‘density’ : same as ‘kde’
      • ‘area’ : area plot
      • ‘pie’ : pie plot
# pandas整合的一些图形的绘制办法
# 绘图要先导入包
import numpy as np
import pandas as pd
from pandas import Series,DataFrame
import matplotlib.pyplot as plt
# 在当前文本编辑器中绘制图像
%matplotlib inline

线形图line

  • 一般用于描述数据变化趋势
  • 线型图最常用的横坐标就是时间
# data是要展示的数据
data = np.random.randint(0,100,size=(10))
# 横坐标
x = np.arange(10)
# Series绘制的线性图是单条线, index作为横坐标, values作为展示的数据
s = Series(data=data, index=x)
s.plot(kind="line")		==>图一# DataFrame绘制多条线,每一列作为一条线绘制
df  ==>A	B
0	76	51
1	93	36
2	88	59
3	55	75
4	11	9
5	43	35
6	10	67
7	43	51
8	54	42
9	39	74
df.plot(kind="line")	==> 图二

图一
在这里插入图片描述
图二
在这里插入图片描述

柱状图bar

Series柱状图示例,kind = ‘bar’/‘barh’

  • 一般用于数据间的横向比较
# 1.Series 数据
data = [10,16,19,18]
# 默认不支持汉语显示
x = ["tom","jack","lucy","mery"]
s = Series(data=data, index=x)
s.plot(kind="bar")
# 2.DataFrame数据
df = DataFrame({"python":[89,78,99],"C":[70,75,80],"PHP":[11,15,10]
}, index=["tom","lucy","jack"])
df.plot(kind="bar")

Series
在这里插入图片描述
DataFrame
在这里插入图片描述

直方图hist

  • 直方图是用来表示频率的图像
    • 每一个柱子的高度,表示的是在该数据区间,数据出现的次数。 每一个柱子的宽度,表示的是数据区间,默认是10个柱子,把数据从最大值~最小值平均分成10个区间
    • 参数bins可以设置直方图方柱的个数上限,越大柱宽越小,数据分组越细致
    • 设置normed参数为True,可以把频数转换为概率
    • kde图:核密度估计,用于弥补直方图由于参数bins设置的不合理导致的精度缺失问题
s = Series(data=np.random.randn(100))
# bins可能会导致直方图绘制不合理,所以一般会结合kde一起展示,但是要使用normed统一单位
# normed=True,柱高表示该区间数据出现的概率
s.plot(kind="hist", bins=8, normed=True)
s.plot(kind="kde")

在这里插入图片描述

散点图scatter

  • 散布图 散布图是观察两个一维数据数列之间的关系的有效方法,DataFrame对象可用
  • 使用方法: 设置kind = ‘scatter’,给明标签columns
df = DataFrame(data={"X":[1,3,5,7,9],"Y":[3,6,8,9,0],"M":[10,10,12,8,11],
})# dataFrame对象绘制散点图与索引无关,一般就是查看某两列数据之间的对应关系
df.plot(kind="scatter",x="Y",y="M")

在这里插入图片描述

  • 散布图矩阵,当有多个点时,两两点的关系

    • 使用函数:pd.plotting.scatter_matrix(),

      pd.plotting.scatter_matrix(frame, alpha=0.5, figsize=None, ax=None, grid=False, diagonal=‘hist’, marker=’.’, density_kwds=None, hist_kwds=None, range_padding=0.05, **kwds)

    • 参数diagnol:设置对角线的图像类型

pd.plotting.scatter_matrix(df,diagonal="hist")

在这里插入图片描述


http://chatgpt.dhexx.cn/article/KfXOyqlt.shtml

相关文章

系统工程--011详细设计 伪码 程序流程图 PAD图 N-S图 判断表和判断树

详细设计 三种控制结构:顺序、选择、循环 一个程序的代码块仅仅通过顺序、选择和循环,3种基本控制结构进行连接,并每个代码块只有一个入口和一个出口伪码 程序流程图 PAD图 N-S图 判断表和判断树

程序流程图、N-S图、PAD图

在需求分阶段经常使用3种方法去剖析我们所面对的业务。 程序流程图 任何复杂的程序图都应由5种基本控制结构组成或嵌套而成。 盒图(N-S图) Nassi和Scheiderman提出了一种符合结构化程序设计原则的图形描述工具,叫作盒图,也叫做N…

PAD图初认识

程序流程图&N-S图&PAD图 程序流程图 任何复杂的程序图都应由5种基本控制结构组成或嵌套而成。 盒图(N-S图) Nassi和Scheiderman提出了一种符合结构化程序设计原则的图形描述工具,叫作盒图,也叫做N-S图。任何一个N-S图&a…

python numpy 图片 pad 参数详解

python numpy 图片 pad 参数详解 ‘constant’, ‘edge’, ‘linear_ramp’, ‘maximum’, ‘mean’, ‘median’, ‘minimum’, ‘reflect’, ‘symmetric’, ‘wrap’, ‘empty’ 光看文档不太好理解,因为在网上找不到详细的例子,所以我就自己动手做了…

E-R图、N-S图、PAD图、程序流程图

E-R图: E-R图也称实体-联系图(Entity Relationship Diagram),提供了表示实体类型、属性和联系的方法,用来描述现实世界的概念模型。 矩形框:表示实体,在框中记入实体名。 菱形框:表示联系,在框…

np.pad()用于卷积网络中对图片进行填充

有一张RGB的图像,我们要在这个图像的周围加上填充元素,使得这个图像不会再卷积操作后导致边缘信息丢失和图像尺寸的减小。 为此,我们需要padding操作,numpy库中对这个进行了封装numpy.pad()函数: 对一个一维数组来说…

numpy.pad对图片进行填充

一、接口 pad(array, pad_width, mode, **kwargs) 其中,第一个参数是输入数组; 第二个参数是需要pad的值,参数输入方式为:((before_1, after_1), … (before_N, after_N)),其中(before_1, af…

第六章:详细设计。盒图、问题分析图即PAD图、过程设计语言PDL伪码

第六章:详细设计 盒图 PAD图 PAD图即:问题分析图。使用表示结构化控制结构的PAD符号设计出来的程序必然是结构化程序。 PAD图所描绘的程序结构十分清晰。PAD图表现程序逻辑易读、易懂、易记。 例题: 过程设计语言(PDL&#xff…

分别画出程序的软件流程图、NS图、PAD图; 程序

1、分别画出程序的软件流程图、NS图、PAD图&#xff1b; 程序 #include<stdio.h> #include<stdlib.h> int main(int argc, char *argv[]) {int Edge_a,Edge_b,Edge_c;printf("Input three int type data between space:\n");scanf("%d %d %d"…

程序流程图 分别用N-S图和PAD图、伪码表示。n阶乘(软件工程)

例题&#xff1a;某程序流程图如右图所示&#xff0c;请分别用 N-S图和PAD图表示。 PAD图&#xff1a; N-S&#xff1a;盒图 2.计算n阶乘的程序N-S图&#xff0c;PAD图

PAD图

地址链接&#xff1a;http://star.aust.edu.cn/~jjguan/guanjj/rjgc/chapter4/cha4_11_3_c1.htm

N-S图、PAD图(例题)

&#xff08;做完这些N-S图、PAD图例题&#xff0c;这两个图也基本就掌握了&#xff09; 1、记录StudentRecord给出即将大学毕业的学生的姓名和平均分&#xff08;GPA&#xff09;。我们的目的是建立一个参加毕业典礼的学生表。候选毕业的学生表从文件”StudRecs”读入。因为学…

软件程序设计中的N-S图、PAD图、程序流程图、E-R图

在软件程序设计中&#xff0c;我们通常会用到以下几种图&#xff0c;来帮助我们&#xff0c;分析问题&#xff0c;整理逻辑。 我将介绍这四种图的特性&#xff0c;以及区分它们的方法。 1.N-S图&#xff1a; 也叫盒图&#xff0c;由美国学者I.Nassi 和 B.Shneiderman提出&…

软件工程——NS图,PAD图

一、实验目的 (1) 熟悉常用的详细设计表达工具 (2) 掌握利用visio等CASE工具设计程序流程图&#xff0c;NS图&#xff0c;PAD图的画法 (3) 掌握利用visual studio 等IDE完成实现代码的编写和调试 二、实验内容 从以下几个程序要求中任选其中的一个进行详细设计和编码实现。 …

详细设计的工具——PAD图

目录 一、PAD图的概念 二、PAD图的基本符号 三、PAD图的优点 四、PAD图的应用 一、PAD图的概念 PAD图&#xff08;Problem Analysis Diagram&#xff09;&#xff0c;由日本日立公司1973年发明以后&#xff0c;已得到一定程度的推广。它用二维树形结构的图来表示程序的控制…

使用windows自带的测速工具WinSat对移动硬盘进行测速

&#xff08;1&#xff09;查看移动硬盘是哪个盘符 &#xff08;2&#xff09;以管理员身份运行命令行程序&#xff08;即cmd&#xff09; &#xff08;3&#xff09;输入 winsat disk -drive h命令对H盘进行测速

利用Windows内置工具测试硬盘速度

用上了SSD一段时间&#xff0c;突然想测一下其读写速度。本来想下个第三方的软件什么的&#xff0c;原来发现Windows有内置的工具使用–WinSat&#xff0c;那自然是最好不过。 操作步骤 以管理员身份运行命令行程序&#xff0c;winR–>输入cmd并回车.(否则在win10下面最终测…

win10使用自带工具进行硬盘测速

实在受不了电脑的软件打开速度了。想着更换一下自己的机械硬盘。奈何钱包没钱啊。 我的天啊&#xff01; 如何使用自带工具测速&#xff1f; 1 、使用管理员方式打开命令提示符 2、键入以下代码查看对应的盘的速度 winsat disk -drive 盘符号再来看一下自己现在的硬盘速度&a…