大家好,又见面了,我是你们的朋友全栈君。
官方文档:https://www.scipy.org/ \qquad https://docs.scipy.org/doc/scipy/reference/index.html
一.基本信息
1.介绍:
SciPy是1个Python开源库,在BSD授权下发布,主要用于数学/科学/工程计算
SciPy依赖于NumPy提供的方便快速的n维数组操作
NumPy+SciPy+Matplotlib的组合可以在很大程度上替代MATLAB
2.SciPy的子模块:
子模块 | 功能 |
---|---|
cluster | 提供聚类算法 |
constants | 提供物理/数学常数 |
fft | 提供快速傅里叶变换 |
integrate | 积分与ODE模块,提供了定积分/多重积分/高斯积分/常微分方程求解器 |
interpolate | 插值模块,提供各种1/2/n维插值算法,包括B样条插值/径向基函数插值 |
io | IO模块,提供与其他文件(如Matlab文件,IDL文件,Wav(音频)文件,ARFF文件)的接口 |
linalg | 线代模块,提供各种线性代数中的常规操作 |
misc | 杂项 |
ndimage | 多维图像处理模块,提供一些多维图像处理上的常用算法 |
odr | 用于完成正交距离回归 |
optimize | 优化模块,提供各种优化算法,包括用来求有/无约束的多元标量函数最小值算法,最小二乘法,求有/无约束的单变量函数最小值算法,解各种复杂方程的算法 |
signal | 信号处理模块,包括样条插值/卷积/差分等滤波方法,FIR/IIR/中值/排序/维纳/希尔伯特等滤波器,各种谱分析算法 |
sparse | 稀疏矩阵模块,提供了大型稀疏矩阵计算中的各种算法 |
spatial | 空间结构模块,提供了一些空间相关的数据结构和算法,如Delaunay三角剖分/共面点/凸包/维诺图/Kd树 |
special | 特殊函数模块,提供了各种特殊的数学函数,如贝塞尔函数 |
stats | 统计模块,提供一些统计学上常用的函数和分布 |
首先导入Scipy(也可以跳过此步):
>>> import scipy
Scipy中的各个子模块也需要独立导入:
>>> import scipy.cluster#①
>>> from scipy import cluster#②
之后可以使用:
>>> scipy.cluster#或scipy.cluster.__dict__#与①对应
<module 'scipy.cluster' from 'C:\\Users\\Euler\\AppData\\Local\\Programs\\Python\\Python38\\lib\\site-packages\\scipy\\cluster\\__init__.py'>
>>> cluster#或cluster.__dict__#与②对应
<module 'scipy.cluster' from 'C:\\Users\\Euler\\AppData\\Local\\Programs\\Python\\Python38\\lib\\site-packages\\scipy\\cluster\\__init__.py'>
如果不独立导入子模块,则无法使用子模块中的变量/方法/属性:
>>> scipy.special
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: module 'scipy' has no attribute 'special'
3.数据结构:
SciPy使用的基本数据结构是NumPy提供的多维数组
4.安装:
pip install scipy
#注意:官方推荐使用--user标志执行pip(使用用户安装),这将为当前用户安装包,不写入系统目录
5.SciPy与NumPy:
默认情况下,所有NumPy函数都可在SciPy中使用,因此导入SciPy时无需显式导入NumPy函数
NumPy的主要对象是多维数组ndarray,SciPy构建在ndarray之上
二.Constants模块
1.数学常数:
>>> ct.pi#圆周率
3.141592653589793
>>> ct.golden#黄金比例,即[math.sqrt(5)+1]/2
1.618033988749895
>>> ct.golden_ratio#黄金比例,即[math.sqrt(5)+1]/2
1.618033988749895
2.物理学常数:
>>> from scipy import constants as ct
>>> ct.c#真空中的光速,单位为m/s
299792458.0
>>> ct.speed_of_light#真空中的光速,单位为m/s
299792458.0
>>> ct.mu_0#磁常数(真空磁导率),单位为H/m
1.25663706212e-06
>>> ct.epsilon_0#真空介电常数,单位为F/m
8.8541878128e-12
>>> ct.h#普朗克常数,单位为J·s
6.62607015e-34
>>> ct.Planck#普朗克常数,单位为J·s
6.62607015e-34
>>> ct.hbar#约化普朗克常数(合理化普朗克常数),即ct.h/(2*math.pi),单位为J·s
1.0545718176461565e-34
>>> ct.G#万有引力常数,单位为(N*(m**2))/(s**2)
6.6743e-11
>>> ct.gravitational_constant#万有引力常数,单位为(N*(m**2))/(s**2)
6.6743e-11
>>> ct.g#重力加速度,单位为m/(s**2)
9.80665
>>> ct.e#电子电荷,单位为C
1.602176634e-19
>>> ct.elementary_charge#电子电荷,单位为C
1.602176634e-19
>>> ct.R#摩尔气体常数(理想气体常数),单位为J/(mol*K)
8.314462618
>>> ct.gas_constant#摩尔气体常数(理想气体常数),单位为J/(mol*K)
8.314462618
>>> ct.alpha#精细结构常数,无量纲
0.0072973525693
>>> ct.fine_structure#精细结构常数,无量纲
0.0072973525693
>>> ct.N_A#阿伏伽德罗常数,单位为1/mol
6.02214076e+23
>>> ct.Avogadro#阿伏伽德罗常数,单位为1/mol
6.02214076e+23
>>> ct.k#玻尔兹曼常数,单位为J/K
1.380649e-23
>>> ct.Boltzmann#玻尔兹曼常数,单位为J/K
1.380649e-23
>>> ct.sigma#斯忒藩-玻尔兹曼常数,单位为W/((m**2)*(K**4))
5.670374419e-08
>>> ct.Stefan_Boltzmann#斯忒藩-玻尔兹曼常数,单位为W/((m**2)*(K**4))
5.670374419e-08
>>> ct.Wien#维恩位移常数,单位为mK
0.002897771955
>>> ct.Rydberg#里德伯常量,单位为1/m
10973731.56816
>>> ct.m_e#电子质量,单位为kg
9.1093837015e-31
>>> ct.electron_mass#电子质量,单位为kg
9.1093837015e-31
>>> ct.m_p#质子质量,单位为kg
1.67262192369e-27
>>> ct.proton_mass#质子质量,单位为kg
1.67262192369e-27
>>> ct.m_n#中子质量,单位为kg
1.67492749804e-27
>>> ct.neutron_mass#中子质量,单位为kg
1.67492749804e-27
######################################################################################################################
更多物理学常数:[(<value>,<unit>,<uncertainty>)=]ct.physical_constants["<name>"]
#这能提供比上述更多的物理学常数
#参数说明:
name:常数名;为str
value:常数值;为float
unit:常数值的单位;为str
uncertainty:误差范围(±);为float
#实例:
>>> ct.physical_constants["electron mass"]#电子质量
(9.1093837015e-31, 'kg', 2.8e-40)
3.单位换算常数
(1)质量换算:
>>> ct.gram#1克(gram)等于多少千克(kilogram)
0.001
>>> ct.metric_ton#1公吨(metric ton)等于多少千克
1000.0
>>> ct.grain#1格令(grain)等于多少千克
6.479891e-05
>>> ct.lb#1常衡磅(avoirdupois pound)等于多少千克
0.45359236999999997
>>> ct.pound#1常衡磅(avoirdupois pound)等于多少千克
0.45359236999999997
>>> ct.blob#1英寸版斯勒格(inch version of a slug)等于多少千克
175.12683524647636
>>> ct.slinch#1英寸版斯勒格(inch version of a slug)等于多少千克
175.12683524647636
>>> ct.slug#1斯勒格(slug)等于多少千克
14.593902937206364
>>> ct.oz#1常衡盎司(avoirdupois ounce)等于多少千克
0.028349523124999998
>>> ct.ounce#1常衡盎司(avoirdupois ounce)等于多少千克
0.028349523124999998
>>> ct.stone#1英石(stone)等于多少千克
6.3502931799999995
>>> ct.long_ton#1长吨(long ton)等于多少千克
1016.0469088
>>> ct.short_ton#1短吨(short ton)等于多少千克
907.1847399999999
>>> ct.troy_ounce#1金衡盎司(troy ounce)等于多少千克
0.031103476799999998
>>> ct.troy_pound#1金衡磅(troy pound)等于多少千克
0.37324172159999996
>>> ct.carat#1克拉(carat)等于多少千克
0.0002
>>> ct.m_u#1原子质量单位等于多少千克
1.6605390666e-27
>>> ct.u#1原子质量单位等于多少千克
1.6605390666e-27
>>> ct.atomic_mass#1原子质量单位等于多少千克
1.6605390666e-27
(2)角度换算:
>>> ct.degree#1度(角度,degree)等于多少弧度(radian)
0.017453292519943295
>>> ct.arcmin#1弧分(角分,arc minute)等于多少弧度
0.0002908882086657216
>>> ct.arcminute#1弧分(角分,arc minute)等于多少弧度
0.0002908882086657216
>>> ct.arcsec#1弧秒(角秒,arc second)等于多少弧度
4.84813681109536e-06
>>> ct.arcsecond#1弧秒(角秒,arc second)等于多少弧度
4.84813681109536e-06
(3)时间换算:
>>> ct.minute#1分钟(minute)等于多少秒
60.0
>>> ct.hour#1小时(hour)等于多少秒
3600.0
>>> ct.day#1天(day)等于多少秒
86400.0
>>> ct.week#1周(week)等于多少秒
604800.0
>>> ct.year#1年(year=365 days)等于多少秒
31536000.0
>>> ct.Julian_year#1儒略年(Julian year=365.25 days)等于多少秒
31557600.0
(4)长度/面积/体积换算:
>>> ct.inch#1英寸(inch)等于多少米(meter)
0.0254
>>> ct.foot#1英制英尺(UK foot)等于多少米
0.30479999999999996
>>> ct.yard#1码(yard)等于多少米
0.9143999999999999
>>> ct.mile#1英制英里(UK mile)等于多少米
1609.3439999999998
>>> ct.mil#1密耳(mil)等于多少米
2.5399999999999997e-05
>>> ct.pt#1磅(point)等于多少米
0.00035277777777777776
>>> ct.point#1磅(point)等于多少米
0.00035277777777777776
>>> ct.survey_foot#1美制英尺(US foot/survey foot)等于多少米
0.3048006096012192
>>> ct.survey_mile#1美制英里(US mile/survey mile)等于多少米
1609.3472186944373
>>> ct.nautical_mile#1海里(nautical mile)等于多少米
1852.0
>>> ct.fermi#1费米(fermi)等于多少米
1e-15
>>> ct.angstrom#1埃(angstrom)等于多少米
1e-10
>>> ct.micron#1微米(micron)等于多少米
1e-06
>>> ct.au#1天文单位(astronomical unit)等于多少米
149597870700.0
>>> ct.astronomical_unit#1天文单位(astronomical unit)等于多少米
149597870700.0
>>> ct.light_year#1光年(light year)等于多少米
9460730472580800.0
>>> ct.parsec#1秒差距(parsec)等于多少米
3.085677581491367e+16
######################################################################################################################
>>> ct.hectare#1公顷(hectare)等于多少平方米
10000.0
>>> ct.acre#1英亩(acre)等于多少平方米
4046.8564223999992
######################################################################################################################
>>> ct.liter#1公升(liter/litre)等于多少立方米
0.001
>>> ct.litre#1公升(liter/litre)等于多少立方米
0.001
>>> ct.gallon#1美制加仑(US gallon)等于多少立方米
0.0037854117839999997
>>> ct.gallon_US#1美制加仑(US gallon)等于多少立方米
0.0037854117839999997
>>> ct.gallon_imp#1英制加仑(UK gallon)等于多少立方米
0.00454609
>>> ct.fluid_ounce#1美制液体盎司(US fluid ounce)等于多少立方米
2.9573529562499998e-05
>>> ct.fluid_ounce_US#1美制液体盎司(US fluid ounce)等于多少立方米
2.9573529562499998e-05
>>> ct.fluid_ounce_imp#1英制液体盎司(UK fluid ounce)等于多少立方米
2.84130625e-05
>>> ct.bbl#1美制桶(US barrel)等于多少立方米
0.15898729492799998
>>> ct.barrel#1美制桶(US barrel)等于多少立方米
0.15898729492799998
(5)压强换算:
>>> ct.atm#1标准大气压(standard atmosphere)等于多少帕
101325.0
>>> ct.atmosphere#1标准大气压(standard atmosphere)等于多少帕
101325.0
>>> ct.bar#1巴(bar)等于多少帕
100000.0
>>> ct.torr#1托(毫米汞柱,torr)等于多少帕
133.32236842105263
>>> ct.mmHg#1托(毫米汞柱,torr)等于多少帕
133.32236842105263
>>> ct.psi#1磅每平方英寸(psi=pounds per square inch)等于多少帕
6894.757293168361
(6)速度换算:
>>> ct.kmh#1千米每小时(kilometer per hour)等于多少米每秒(meter per second)
0.2777777777777778
>>> ct.mph#1英制英里每小时(UK mile per hour)等于多少米每秒
0.44703999999999994
>>> ct.speed_of_sound#1倍音速(speed of sound)等于多少米每秒
340.5
>>> ct.knot#1节(knot)等于多少米每秒
0.5144444444444445
(7)温度/能量/功率:
>>> ct.zero_Celsius#0摄氏度(degree of Celsius scale)等于多少开氏度(Kelvin/degree of Kelvin scale)(仅该点,即0℃=273.15K)
273.15
>>> ct.degree_Fahrenheit#1华氏度(degree of Fahrenheit scale)等于多少开氏度(仅比例)
0.5555555555555556
######################################################################################################################
>>> ct.eV#1电子伏特(electron volt)等于多少焦(Joule)
1.602176634e-19
>>> ct.electron_volt#1电子伏特(electron volt)等于多少焦
1.602176634e-19
>>> ct.calorie#1热化学卡(thermochemical calorie)等于多少焦
4.184
>>> ct.calorie_th#1热化学卡(thermochemical calorie)等于多少焦
4.184
>>> ct.calorie_IT#1国际蒸汽表卡(International Steam Table calorie)等于多少焦
4.1868
>>> ct.erg#1尔格(erg)等于多少焦
1e-07
>>> ct.Btu#1英国热量单位(国际蒸汽表)(British thermal unit(International Steam Table))等于多少焦
#注:该单位使用国际蒸汽表卡定义
1055.05585262
>>> ct.Btu_IT#1英国热量单位(国际蒸汽表)(British thermal unit(International Steam Table))等于多少焦
#注:该单位使用国际蒸汽表卡定义
1055.05585262
>>> ct.Btu_th#1英国热量单位(热化学)(British thermal unit(thermochemical))等于多少焦
#注:该单位使用热化学卡定义
1054.3502644888888
>>> ct.ton_TNT#1吨TNT爆炸释放的能量等于多少焦
4184000000.0
######################################################################################################################
>>> ct.hp#1英制马力(UK horsepower)等于多数瓦
745.6998715822701
>>> ct.horsepower#1英制马力(UK horsepower)等于多数瓦
745.6998715822701
(8)力换算:
>>> ct.dyn#1达因(dyne)等于多少牛
1e-05
>>> ct.dyne#1达因(dyne)等于多少牛
1e-05
>>> ct.lbf#1磅力(pound force)等于多少牛
4.4482216152605
>>> ct.pound_force#1磅力(pound force)等于多少牛
4.4482216152605
>>> ct.kgf#1千克力(kilogram force)等于多少牛
9.80665
>>> ct.kilogram_force#1千克力(kilogram force)等于多少牛
9.80665
4.前缀常数:
#注意:以下常数均为量纲
######################################################################################################################
#10进制前缀(SI prefix):
>>> ct.yotta#1e24
1e+24
>>> ct.zetta#1e21
1e+21
>>> ct.exa#1e18
1e+18
>>> ct.peta#1e15
1000000000000000.0
>>> ct.tera#1e12
1000000000000.0
>>> ct.giga#1e9
1000000000.0
>>> ct.mega#1e6
1000000.0
>>> ct.kilo#1e3
1000.0
>>> ct.hecto#1e2
100.0
>>> ct.deka#1e1
10.0
>>> ct.deci#1e-1
0.1
>>> ct.centi#1e-2
0.01
>>> ct.milli#1e-3
0.001
>>> ct.micro#1e-6
1e-06
>>> ct.nano#1e-9
1e-09
>>> ct.pico#1e-12
1e-12
>>> ct.femto#1e-15
1e-15
>>> ct.atto#1e-18
1e-18
>>> ct.zepto#1e-21
1e-21
######################################################################################################################
#2进制前缀(Binary prefix):
>>> ct.kibi#2**10
1024
>>> ct.mebi#2**20
1048576
>>> ct.gibi#2**30
1073741824
>>> ct.tebi#2**40
1099511627776
>>> ct.pebi#2**50
1125899906842624
>>> ct.exbi#2**60
1152921504606846976
>>> ct.zebi#2**70
1180591620717411303424
>>> ct.yobi#2**80
1208925819614629174706176
三.IO模块
1.mat文件
(1)读取:
读取.mat文件:[<mat_dict>=]scipy.io.loadmat("<file_name>"[,mdict=None,appendmat=True,byte_order=None,mat_dtype,squeeze_me,chars_as_strings,matlab_compatible,struct_as_record,verify_compressed_data_integrity,variable_names=None,simplify_cells=False,**kwargs])
#参数说明:
filename:指定要读取的文件;为str/file-like object
mdict:指定要在<mat_dict>中添加的键值对;为dict
appendmat:是否在提供的文件名结尾加上.mat后缀;为bool
#为True时,<file_name>中可不加后缀名(也可加).mat;为False时,必须加
byte_order:指定字节顺序;为None(从文件中推测)/str(可为'native'/'='/'little'/'<'/'BIG'/'>')
mat_dtype:为bool
squeeze_me:为bool
chars_as_strings:是否将char array转换为str array;为bool
matlab_compatible:为bool
struct_as_record:为bool
verify_compressed_data_integrity:为bool
variable_names:指定要读取的变量;为None(读取所有)/sequence
simplify_cells:为bool
mat_dict:返回读取到的数据;为dict
#<mat_dict>=<mdict>+<file_name>
(2)写入:
保存到.mat文件:[None=]scipy.io.savemat("<file_name>",<mdict>[,appendmat=True,format='5',long_field_names=False,do_compression=False,oned_as='row')
#参数说明:
file_name:指定要保存到的文件(需要加后缀);为str/file-like object
mdict:指定要保存的数据;为dict
appendmat:现在没卵用(SciPy版本1.5.2)
format:对MATLAB 5及更新的版本使用'5'
对MATLAB 4使用'4'
long_field_names:是否允许长字段名;为bool
#为True,字段名最长为63个字符;为False,最长为31个字符
do_compression:是否在写入时压缩矩阵;为bool
oned_as:为'row'表示将1维NumPy array写入为行向量
为'column'表示将1维NumPy array写入为列向量
(3)查看:
查看.mat文件中的所有变量:[<variables>=]scipy.io.whosmat("<file_name>"[,appendmat=True,byte_order=None,mat_dtype,squeeze_me,chars_as_strings,matlab_compatible,struct_as_record,**kwargs])
#参数说明:
file_name:指定要查看的文件;为str/file-like object
appendmat:是否在提供的文件名结尾加上.mat后缀;为bool
#为True时,<file_name>中可不加后缀名(也可加).mat;为False时,必须加
byte_order:指定字节顺序;为None(从文件中推测)/str(可为'native'/'='/'little'/'<'/'BIG'/'>')
mat_dtype:为bool
squeeze_me:为bool
chars_as_strings:是否将char array转换为str array;为bool
matlab_compatible:为bool
struct_as_record:为bool
variables:返回读取到的变量;为list of tuple,tuple中包含矩阵的名字(为str)/形状(为tuple of int)/数据类型(为str)
2.SAV文件:
读取SAV文件:[<idl_dict>=]scipy.io.readsav("<file_name>"[,idict=None,python_dict=False,uncompressed_file_name=None,verbose=False])
#参数说明:
file_name:指定要查看的文件;为str
idict:指定要在<idl_dict>中添加的键值对;为dict
python_dict:是否返回标准的dict;为bool
#为False表示返回大小写不敏感的dict;为True表示返回标准的dict
uncompressed_file_name:为str/None
verbose:为bool
idl_dict:返回读取到的数据;为AttrDict(python_dict=False)/dict(python_dict=True)
3.Matrix Market文件
(1)读取:
读取Matrix Market文件:[<a>=]scipy.io.mmread("<source>")
#参数说明:
source:指定要读取的文件;为str/file-like object
a:返回读取到的数据;为ndarray/coo_matrix
(2)写入:
保存到Matrix Market文件:[None=]scipy.io.mmwrite("<target>",<a>[,comment='',field=None,precision=None,symmetry=None])
#参数说明:
target:指定要保存到的文件;为str/file-like object
a:指定要保存的数据;为array-like
comment:为str
field:为None/str(为'real'/'complex'/'pattern'/'integer')
precision:指定显示的数字位数;为None/int
symmetry:为None/str(为'general'/'symmetric'/'skew-symmetric'/'hermitian')
(3)查看:
查看Matrix Market文件的相关信息:[<info_tuple>=]scipy.io.mminfo("<source>")
#参数说明:
source:指定要查看的文件;为str/file-like object
info_tuple:返回相关信息;为tuple
格式为:(<rows>,<cols>,<entries>,<format>,<field>,<symmetry>)
rows,cols:矩阵的行/列数;为int
entries:稀疏矩阵中非0元素的格式或密集矩阵中元素的个数(包括0);为int
format:为'coordinate'/'array'
field:为'real'/'complex'/'pattern'/'integer'
symmetry:为'general'/'symmetric'/'skew-symmetric'/'hermitian'
4.WAV文件
#需要单独导入相关文件:
import scipy.io.wavfile
(1)读取:
关于内存映射和端口映射参见:https://blog.csdn.net/xin15200793067/article/details/42809499
读取WAV文件:[<fs>,<data>=]scipy.io.wavfile.read("<filename>"[,mmap=False])
#参数说明:
filename:指定要读取的文件;为str/file-like object
mmap:是否按内存映射的方式读取数据;为bool
#为True表示按内存映射(Memory mapped)的方式读取;为False表示按端口映射(Port mapped)的方式读取
#仅用于Only to be used on real files
fs:返回采样率(sample rate);为int
data:返回读取到的数据;为numpy array
(2)写入:
保存到WAV文件:[None=]scipy.io.wavfile.write("<filename>",<rate>,<data>)
#参数说明:
filename:指定要保存到的文件;为str/file handle
rate:指定采样率;为int,单位为Hz(samples/sec)
data:指定要保存的数据;为int/float ndarray
5.ARFF文件:
#需要单独导入相关文件:
import scipy.io.arff
读取ARFF文件:[<data>,<meta>=]scipy.io.arff.loadarff(<f>)
#参数说明:
f:指定要读取的文件;为str/file-like object
data:返回读取到的数据;为array
meta:返回一些文件的相关信息;为scipy.io.arff.MetaData object
6.Netcdf:
读取NetCDF文件(通过创建对象):[<o>=]scipy.io.netcdf_file("<filename>"[,mode='r',mmap=None,version=1,maskandscale=False])
#参数说明:
filename:指定作为数据来源的文件;为str/file-like object
mode:指定打开文件的模式;为'r'(只读)/'w'(只写)/'a'(只追加)
mmap:为None/bool
version:指定NetCDF文件的版本;可为1/2
maskandscale:指定是否基于属性自动缩放/隐藏数据;为bool
o:返回创建的对象,其中包含<filename>中的数据;为netcdf_file object
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/153474.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...