Python 第三方模块 科学计算 SciPy模块1 简介,常数,IO

官方文档: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 "", 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:常数名;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(""[,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时,中可不加后缀名(也可加).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
      #=+

(2)写入:

保存到.mat文件:[None=]scipy.io.savemat("",<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(""[,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时,中可不加后缀名(也可加).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(""[,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:指定要读取的文件;str/file-like object
    a:返回读取到的数据;为ndarray/coo_matrix

(2)写入:

保存到Matrix Market文件:[None=]scipy.io.mmwrite("",<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:指定要查看的文件;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(""[,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("",<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(""[,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

你可能感兴趣的:(python,scipy,constant,IO)