爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 28710|回复: 21

[参考资料] [已收纳]python之Scipy库入门与案例

[复制链接]

新浪微博达人勋

发表于 2019-6-29 16:10:10 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
本帖最后由 15195775117 于 2021-1-27 10:31 编辑

Scipy库是科学计算库,比Numpy高级一些。
IDL除了自带的科学计算函数,还有IMSL库辅助。
---------------------------
Scipy包括的子模块有:
  • 文件读写模块:io
  • 微积分:integrate
  • 线性代数模块:linalg
  • 信号处理:signal
  • 系数矩阵:sparse
  • 常用函数Fortran库:SPECFUN
  • FFT模块:fftpack
  • 优化器模块:optimize
  • 插值模块:interpolate
  • 统计模块:stats

---------------------------
以下逐一介绍:


本帖被以下淘专辑推荐:

密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2019-6-29 21:57:54 | 显示全部楼层
支持一下楼主
密码修改失败请联系微信:mofangbao
回复 支持 1 反对 0

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2019-6-29 16:36:43 | 显示全部楼层
本帖最后由 15195775117 于 2020-6-25 14:15 编辑

io模块--------------
mat文件是matlab的数据存储的标准格式,二进制。
python读写这种格式,跟matlab搭上了关系。
第一篇:保存mat文件
import numpy as np
from scipy import io as sio
a=np.zeros((3,3))
#把数据结构体保存为mat文件
#输出文件完整名:
matfile=r'C:\Users\朽木\Desktop\wha.mat'
#数据结构体:
data={'data':a}
#保存:
sio.savemat(matfile,data)
#这跟IDL把数据保存为sav文件类似,但sav文件似乎为IDL专用
----------------------------------
第二篇:读取mat文件
import numpy as np
from scipy import io as sio
matfile=r'C:\Users\朽木\Desktop\wha.mat'
data=sio.loadmat(matfile,struct_as_record=True)
#python的字典就是IDL的结构体,读取方式是按字典来的:
print(data['data'])


密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2019-6-29 16:59:43 | 显示全部楼层
支持一下楼主
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2019-6-29 17:00:38 | 显示全部楼层
本帖最后由 15195775117 于 2020-6-25 14:17 编辑

线性代数模块
import numpy as np
from scipy import linalg
a=np.array([[1,2],[3,4]])
#行列式值:
deta=linalg.det(a)
#逆矩阵:
a_inv=linalg.inv(a)
print(np.round(np.dot(a,a_inv)))
输出:
[[1. 0.]
[0. 1.]]

密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2019-6-29 17:16:57 | 显示全部楼层
本帖最后由 15195775117 于 2020-6-25 14:17 编辑

FFT模块
360截图20190629171257503.jpg
import numpy as np
import matplotlib.pyplot as plt
#导入FFT模块
from scipy import fftpack
#准备数据:
a=np.zeros(1000)
a[:100]=1
#快速傅里叶变换:
a_fft=fftpack.fft(a)
#频谱搬移:
a_fftshift=np.hstack((a_fft[500:],a_fft[:500]))
#辅助数据:
f=np.arange(-500,500,1)
#设置图的大小:
plt.figure(figsize=[8,4],dpi=100)
#FFT图:
plt.plot(f,abs(a_fftshift))

密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2019-6-29 17:23:25 | 显示全部楼层

谢谢支持
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2019-6-29 17:33:42 | 显示全部楼层
本帖最后由 15195775117 于 2020-6-25 14:18 编辑

优化器模块

360截图20190629172545066.jpg

import numpy as np
import matplotlib.pyplot as plt
from scipy import optimize
#定义曲线函数
def f(x):
    return x**2+10*np.sin(x)
x=np.arange(-10,10,0.1)
optimize.fmin_bfgs(f,0)
plt.plot(x,f(x))

优化问题是一个大门类,没研究过,我要学习的还有很多!
我设想的这个优化方法可以应用的领域:
1、遥感反演计算;
2、气象参数廓线;
3、激光雷达反演算法。
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2019-6-29 18:35:42 | 显示全部楼层
本帖最后由 15195775117 于 2020-6-25 14:20 编辑

插值模块

360截图20190629182926367.jpg
import numpy as np
import matplotlib.pyplot as plt
#这里有个坑,p1d中间的是数字1,不是字母L!
from scipy.interpolate import interp1d
#x轴序列:
a=np.linspace(0,1,10)
#叠加噪声:
noise=(np.random.random(10)*2-1)*1e-1
b=np.sin(2*np.pi*a)+noise
plt.plot(a,b,"bo")
#根据a,b的关系生成个函数,类似一个拟合函数
f=interp1d(a,b)
x=np.linspace(0,1,50)
#画出经计算的插值曲线:
y=f(x)
plt.plot(x,y,"r*")


密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2019-6-29 19:00:29 | 显示全部楼层
本帖最后由 15195775117 于 2020-6-25 14:21 编辑

统计模块

360截图20190629185657427.jpg

import numpy as np
import matplotlib.pyplot as plt
from scipy import stats
#正态分布随机数
a=np.random.normal(size=1000)
#计算均值和方差:
mean,std=stats.norm.fit(a)
print(mean,std)
#升序排列,会改变原数组:
a.sort()
plt.plot(a,color='m')


密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表