大橙子网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
python做科学计算的特点:1. 科学库很全。(推荐学习:Python视频教程)
成都创新互联专注于企业网络营销推广、网站重做改版、新昌网站定制设计、自适应品牌网站建设、H5高端网站建设、商城网站建设、集团公司官网建设、成都外贸网站建设、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为新昌等各大城市提供网站开发制作服务。
科学库:numpy,scipy。作图:matplotpb。并行:mpi4py。调试:pdb。
2. 效率高。
如果你能学好numpy(array特性,f2py),那么你代码执行效率不会比fortran,C差太多。但如果你用不好array,那样写出来的程序效率就只能呵呵了。所以入门后,请一定花足够多的时间去了解numpy的array类。
3. 易于调试。
pdb是我见过最好的调试工具,没有之一。直接在程序断点处给你一个截面,这只有文本解释语言才能办到。毫不夸张的说,你用python开发程序只要fortran的1/10时间。
4. 其他。
它丰富而且统一,不像C++的库那么杂(好比pnux的各种发行版),python学好numpy就可以做科学计算了。python的第三方库很全,但是不杂。python基于类的语言特性让它比起fortran等更加容易规模化开发。
数值分析中,龙格-库塔法(Runge-Kutta methods)是用于非线性常微分方程的解的重要的一类隐式或显式迭代法。这些技术由数学家卡尔·龙格和马丁·威尔海姆·库塔于1900年左右发明。
龙格-库塔(Runge-Kutta)方法是一种在工程上应用广泛的高精度单步算法,其中包括著名的欧拉法,用于数值求解微分方程。由于此算法精度高,采取措施对误差进行抑制,所以其实现原理也较复杂。
高斯积分是在概率论和连续傅里叶变换等的统一化等计算中有广泛的应用。在误差函数的定义中它也出现。虽然误差函数没有初等函数,但是高斯积分可以通过微积分学的手段解析求解。高斯积分(Gaussian integral),有时也被称为概率积分,是高斯函数的积分。它是依德国数学家兼物理学家卡尔·弗里德里希·高斯之姓氏所命名。
洛伦茨吸引子及其导出的方程组是由爱德华·诺顿·洛伦茨于1963年发表,最初是发表在《大气科学杂志》(Journal of the Atmospheric Sciences)杂志的论文《Deterministic Nonperiodic Flow》中提出的,是由大气方程中出现的对流卷方程简化得到的。
这一洛伦茨模型不只对非线性数学有重要性,对于气候和天气预报来说也有着重要的含义。行星和恒星大气可能会表现出多种不同的准周期状态,这些准周期状态虽然是完全确定的,但却容易发生突变,看起来似乎是随机变化的,而模型对此现象有明确的表述。
更多Python相关技术文章,请访问Python教程栏目进行学习!以上就是小编分享的关于python能做什么科学计算的详细内容希望对大家有所帮助,更多有关python教程请关注环球青藤其它相关文章!
我的也一样,不纠结这个。反正使用时指定精度就行了。
帮你试了,必须写成这样才行。二进制表示10进制的小数,10进制里很正常的
谈谈关于Python里面小数点精度控制的问题
十进制整数不会变成二进制小数,但十进制很短的小数的是可能变成二进制很长小数的。
例如0.54转变成二进制是:
0.54=0.10001010001111010111000010100011110101110000101001B
还有一些十进制下一两位小数,在二进制下无限循环小数的,只能取近似值。
numpy的allclose方法,比较两个array是不是每一元素都相等,默认在1e-05的误差范围内。
使用如图:
源码如下:
1、Numpy常用方法使用大全(超详细)
1、Series和DataFrame简单入门
2、Pandas操作CSV文件的读写
3、Pandas处理DataFrame,Series进行作图
1、Matplotlib绘图之属性设置
2、Matplotlib绘制误差条形图、饼图、等高线图、3D柱形图
1、层次分析法(AHP)——算数平均值法、几何平均值法、特征值法(Python实现,超详细注释)
2、Python实现TOPSIS分析法(优劣解距离法)
3、Python实现线性插值和三次样条插值
4、Python实现线性函数的拟合算法
5、Python实现统计描述以及计算皮尔逊相关系数
6、Python实现迪杰斯特拉算法和贝尔曼福特算法求解最短路径
对于气象绘图来讲,第一步是对数据的处理,通过各类公式,或者统计方法将原始数据处理为目标数据。
按照气象统计课程的内容,我给出了一些常用到的统计方法的对应函数:
在计算气候态,区域平均时均要使用到求均值函数,对应NCL中的dim_average函数,在python中通常使用np.mean()函数
numpy.mean(a, axis, dtype)
假设a为[time,lat,lon]的数据,那么
需要特别注意的是,气象数据中常有缺测,在NCL中,使用求均值函数会自动略过,而在python中,当任意一数与缺测(np.nan)计算的结果均为np.nan,比如求[1,2,3,4,np.nan]的平均值,结果为np.nan
因此,当数据存在缺测数据时,通常使用np.nanmean()函数,用法同上,此时[1,2,3,4,np.nan]的平均值为(1+2+3+4)/4 = 2.5
同样的,求某数组最大最小值时也有np.nanmax(), np.nanmin()函数来补充np.max(), np.min()的不足。
其他很多np的计算函数也可以通过在前边加‘nan’来使用。
另外,
也可以直接将a中缺失值全部填充为0。
np.std(a, axis, dtype)
用法同np.mean()
在NCL中有直接求数据标准化的函数dim_standardize()
其实也就是一行的事,根据需要指定维度即可。
皮尔逊相关系数:
相关可以说是气象科研中最常用的方法之一了,numpy函数中的np.corrcoef(x, y)就可以实现相关计算。但是在这里我推荐scipy.stats中的函数来计算相关系数:
这个函数缺点和有点都很明显,优点是可以直接返回相关系数R及其P值,这避免了我们进一步计算置信度。而缺点则是该函数只支持两个一维数组的计算,也就是说当我们需要计算一个场和一个序列的相关时,我们需要循环来实现。
其中a[time,lat,lon],b[time]
(NCL中为regcoef()函数)
同样推荐Scipy库中的stats.linregress(x,y)函数:
slop: 回归斜率
intercept:回归截距
r_value: 相关系数
p_value: P值
std_err: 估计标准误差
直接可以输出P值,同样省去了做置信度检验的过程,遗憾的是仍需同相关系数一样循环计算。
Python math 库提供许多对浮点数的数学运算函数,math模块不支持复数运算,若需计算复数,可使用cmath模块(本文不赘述)。
使用dir函数,查看math库中包含的所有内容:
1) math.pi # 圆周率π
2) math.e #自然对数底数
3) math.inf #正无穷大∞,-math.inf #负无穷大-∞
4) math.nan #非浮点数标记,NaN(not a number)
1) math.fabs(x) #表示X值的绝对值
2) math.fmod(x,y) #表示x/y的余数,结果为浮点数
3) math.fsum([x,y,z]) #对括号内每个元素求和,其值为浮点数
4) math.ceil(x) #向上取整,返回不小于x的最小整数
5)math.floor(x) #向下取整,返回不大于x的最大整数
6) math.factorial(x) #表示X的阶乘,其中X值必须为整型,否则报错
7) math.gcd(a,b) #表示a,b的最大公约数
8) math.frexp(x) #x = i *2^j,返回(i,j)
9) math.ldexp(x,i) #返回x*2^i的运算值,为math.frexp(x)函数的反运算
10) math.modf(x) #表示x的小数和整数部分
11) math.trunc(x) #表示x值的整数部分
12) math.copysign(x,y) #表示用数值y的正负号,替换x值的正负号
13) math.isclose(a,b,rel_tol =x,abs_tol = y) #表示a,b的相似性,真值返回True,否则False;rel_tol是相对公差:表示a,b之间允许的最大差值,abs_tol是最小绝对公差,对比较接近于0有用,abs_tol必须至少为0。
14) math.isfinite(x) #表示当x不为无穷大时,返回True,否则返回False
15) math.isinf(x) #当x为±∞时,返回True,否则返回False
16) math.isnan(x) #当x是NaN,返回True,否则返回False
1) math.pow(x,y) #表示x的y次幂
2) math.exp(x) #表示e的x次幂
3) math.expm1(x) #表示e的x次幂减1
4) math.sqrt(x) #表示x的平方根
5) math.log(x,base) #表示x的对数值,仅输入x值时,表示ln(x)函数
6) math.log1p(x) #表示1+x的自然对数值
7) math.log2(x) #表示以2为底的x对数值
8) math.log10(x) #表示以10为底的x的对数值
1) math.degrees(x) #表示弧度值转角度值
2) math.radians(x) #表示角度值转弧度值
3) math.hypot(x,y) #表示(x,y)坐标到原点(0,0)的距离
4) math.sin(x) #表示x的正弦函数值
5) math.cos(x) #表示x的余弦函数值
6) math.tan(x) #表示x的正切函数值
7)math.asin(x) #表示x的反正弦函数值
8) math.acos(x) #表示x的反余弦函数值
9) math.atan(x) #表示x的反正切函数值
10) math.atan2(y,x) #表示y/x的反正切函数值
11) math.sinh(x) #表示x的双曲正弦函数值
12) math.cosh(x) #表示x的双曲余弦函数值
13) math.tanh(x) #表示x的双曲正切函数值
14) math.asinh(x) #表示x的反双曲正弦函数值
15) math.acosh(x) #表示x的反双曲余弦函数值
16) math.atanh(x) #表示x的反双曲正切函数值
1)math.erf(x) #高斯误差函数
2) math.erfc(x) #余补高斯误差函数
3) math.gamma(x) #伽马函数(欧拉第二积分函数)
4) math.lgamma(x) #伽马函数的自然对数