用Python做科学计算(入门)

2016-02-06 14:39:44

本博客采用创作共用版权协议, 要求署名、非商业用途和保持一致. 转载本博客文章必须也遵循署名-非商业用途-保持一致的创作共用协议

本文记载的是我最近使用 python做建模所使用的一般操作

作为记录使用

这里推荐一下anaconda,因为众多windows用户下pip还是算比较蛋疼的,而且估计非计算机相关的人也不想管这些坑,那么选择anaconda就是最好的选择了,它是一个集成工具,甚至连flask都包括进去了,而且ipython简直不要太好用哦

我使用的是ipython操作环境,它是伯克利的一个项目,意在让python操作数据更加舒服

矩阵计算


首先要说的是 numpy,他是用c写的一个科学计算库,python真是凭借他在科学计算占有相当重要的地位

下载 numpy:

pip install numpy

首先是numpy的基础:

In [1]: import numpy as np

In [2]: data=np.array([1,2,3])

In [3]: data
Out[3]: array([1, 2, 3])

In [4]: data=np.array([[1,2,3],[4,5,6]])

好的,我们初始化了一个矩阵,学过线性代数的同学肯定就非常熟悉了

转制:

In [7]: data.T
Out[7]: 
array([[1, 4],
       [2, 5],
       [3, 6]])

加减乘除:

In [8]: data+3
Out[8]: 
array([[4, 5, 6],
       [7, 8, 9]])

In [9]: data-5
Out[9]: 
array([[-4, -3, -2],
       [-1,  0,  1]])

In [10]: data*4
Out[10]: 
array([[ 4,  8, 12],
       [16, 20, 24]])

In [11]: data/2
Out[11]: 
array([[0, 1, 1],
      [2, 2, 3]])    

In [15]: data**2
Out[15]: 
array([[ 1,  4,  9],
      [16, 25, 36]])

矩阵计算:

In [12]: x=np.array([[1,2],[3,4]])

In [13]: y=np.array([[5,6],[7,8]])

In [14]: x*y
Out[14]: 
array([[ 5, 12],
       [21, 32]])

通用函数:

In [16]: np.cos(x)
Out[16]: 
array([[ 0.54030231, -0.41614684],
       [-0.9899925 , -0.65364362]])

In [17]: np.sqrt(x)
Out[17]: 
array([[ 1.        ,  1.41421356],
       [ 1.73205081,  2.        ]])
In [18]: np.exp(x)
Out[18]: 
array([[  2.71828183,   7.3890561 ],
      [ 20.08553692,  54.59815003]])

拟合一次函数:

In [19]: a=np.array([1,2,3,4,5])

In [20]: b=np.array([2,4,6,8,10])

In [22]: k=np.polyfit(a,b,1)

In [23]: z=k.poly1d(k)

In [26]: print z

2 x - 2.78e-15

拟合二次函数:

In [27]: x=np.array([1,2,3,4,5])

In [28]: x=np.array([0,1,2,3,4,5])

In [29]: y=np.array([0,1,4,9,16,25])

In [30]: k=np.polyfit(x,y,2)

In [31]: z=np.poly1d(k)

In [32]: print z
    2
1 x + 4.964e-16 x - 9.575e-18

画图


其实使用matplotlib画图还是很舒服的,不过原来的话有点丑

这里推荐一个斯坦福写的库seaborn

安装:

pip install seaborn

使用很简单,在前面加一句:

import seaborn as sns

好了,我们简单的来画几张图把:

import numpy as np
import matplotlib.pylab as plt
import matplotlib as mpl
import seaborn as sns

#初始化x和y

x=np.array([1,2,3,4,5])

y=np.array([2,4,6,8,10])

#画散点图
plt.scatter(x,y)

#show
plt.show()

好的我们得到一张图片:

pic

是不是不好看,我们做点修饰:

import numpy as np
import matplotlib.pylab as plt
import matplotlib as mpl
import seaborn as sns

#初始化x和y

x=np.array([1,2,3,4,5])

y=np.array([2,4,6,8,10])

#画散点图,我们给他个颜色"red",然后设计个透明度:0.5",再定个大小"55"
plt.scatter(x,y,c="red",alpha=0.5,s=55,label="data")

#定个标题
plt.title("our figure")

#设个标签
plt.legend(loc=1)

#我们把y轴和x轴给改改,改成(-1,6)和 (-2,12)区间
plt.xlim(-1,6)
plt.ylim(-2,12)


#show
plt.show()

pic

是不是好看很多

那我吗把散点图改成函数图:

import numpy as np
import matplotlib.pylab as plt
import matplotlib as mpl
import seaborn as sns

#初始化x和y

x=np.array([1,2,3,4,5])

y=np.array([2,4,6,8,10])

#画函数图,我们给他个颜色"red",然后设计个透明度:0.5""
plt.plot(x,y,c="red",alpha=0.5,label="data")

#定个标题
plt.title("our figure")

#设个标签
plt.legend(loc=1)

#我们把y轴和x轴给改改,改成(-1,6)和 (-2,12)区间
plt.xlim(-1,6)
plt.ylim(-2,12)


#show
plt.show()

pic

基本的需要的画图就这些够日常的了

符号计算


符号计算用的是python的一个符号库 sympy

安装:

pip install sympy

在sympy中,你必须使用他的代数系统,这就和数学的代数系统类似,意味着,你必须这样:

In [33]: from sympy import Symbol

In [34]: x=Symbol("x")

In [35]: y=Symbol("y")

In [36]: y=x+2

In [37]: y
Out[37]: x + 2

In [41]: print(1/((x+2)*(x+1)))
1/((x + 1)*(x + 2))

你也可以用它做求极限:

In [44]: from sympy import limit,Symbol,sin,oo

In [45]: x=Symbol("x")

In [46]: limit(sin(x)/x,x,0)
Out[46]: 1

你也可以用它求 微分:

In [47]: from sympy import diff

In [48]: diff(sin(2*x),x)
Out[48]: 2*cos(2*x)

当然的,你也可以用它做 积分

In [49]: from sympy import integrate,erf,exp

In [50]: inte
integrate  intern     

In [50]: integrate(6*x**5,x)
Out[50]: x**6

比较强大的是,它还可以解微分方程:

In [52]: from sympy import Function,dsolve

In [54]: f=Function("f")

In [55]: x=Symbol("x")

In [56]: f(x).diff(x,x)+f(x)
Out[56]: f(x) + Derivative(f(x), x, x)

In [57]: dsolve(f(x).diff(x,x)+f(x),f(x))
Out[57]: f(x) == C1*sin(x) + C2*cos(x)

In [51]: integrate(exp(-x**2)*erf(x),x)
Out[51]: sqrt(pi)*erf(x)**2/4

通常数学建模所需要的,就是以上,如果有什么其他需要的,可以联系我,这个系列还会继续写下去

科学计算 返回首页

Designed and built with all the love in the world by the Mr.ALJUN.

@SERVER BY NGINX AND POWER BY DIGITALOCEAN.

© COPYRIGHT BY GAGASALAMER 2015