第一章 Python 科学计算环境的安装与简介
1.1 Python 简介
1.2 IPython Notebook 入门
1.2.1 基本操作
3 安装 MathJax
1.2.2 Magic 命令
1 显示matplotlib 图表
#%matplotlib qt4
import pylab
pylab.seed(1)
data = pylab.randn(100)
pylab.plot(data)
[<matplotlib.lines.Line2D at 0x90eb356400>]
2 性能分析
a = [1,2,3]
%timeit a[1] = 10 #单行语句的执行时间
10000000 loops, best of 3: 44.6 ns per loop
%%timeit # 测试整个单元中代码的执行时间
a = []
for i in range(10):
a.append(i)
1000000 loops, best of 3: 1.26 µs per loop
%%time # timeit命令会重复执行代码很多次,而time只执行一次代码,time 可以作为行命令和单元命令。
a = []
for i in range(1000):
a.append(i)
UsageError: Can't use statement directly after '%%time'!
%%capture time_results #%%capture命令,将单元格的输出保存为一个对象
import random
for n in [1000, 5000, 10000, 50000, 100000, 500000]:
print("n={0}".format(n))
alist = list(range(n))
%time random.shuffle(alist)
python2 不是取消了 xrange ,而是取消了 range ,同时将 xrange重新命名成 range 。如果希望生成原来的列表形式的 range ,只要用list(range(…))就可以了。
print(time_results.stdout) #time_results.stdout 属性保存标准输出管道中的输出信息
%%prun # %%prun 命令调用 profile 模块,对单元中的代码进行性能剖析。
def fib(n):
if n < 2:
return 1
else:
return fib(n-1)+fib(n-2)
def fib_fast(n, a=1, b=1):
if n==1:
return b
else:
return fib_fast(n-1,b,a+b)
fib(20)
fib_fast(20)
3 代码调试
import math
def sinc(x):
return math.sin(x)/x
[sinc(x) for x in range(1,5)] #注意,不能从0开始,要从1开始
%debug #debug 有两种用法,这只是其中一种
4 自定义的魔法
1.2.3 Notebook 的显示系统
1 display 模块
from IPython import display
for i in range(2,4):
display.display(display.Latex("$x^{i} + y^{i}$".format(i = i)))
display.Latex("$x^4 + y^4$")
imi = "G:\pictures\prtsc\4.png"
display.Image(url = imi, embed = True)
2 自定义对象的显示格式
1.2.4 定制IPython Notebook
1.3 扩展库介绍
1.3.1 数值计算库(Numpy/Scipy)
import numpy as np
n = 100000
np.sum(4.0/np.r_[1:n:4, -3:-n:-4])
使用SciPy 中提供的数值积分函数quad()计算pi:
from scipy.integrate import quad
quad(lambda x:(1-x**2)**0.5, -1, 1)[0]*2
1.3.2 符号计算库(SymPy)
from sympy import symbols, integrate, sqrt
x = symbols("x")
integrate(sqrt(1-x**2), (x, -1, 1))*2
1.3.3 绘图和可视化
%matplotlib inline
import pylab
import numpy as np
x, y = np.mgrid[-2:2:500j, -2:2:500j]
z = (x**2 + y**2 - 1)**3 - x**2 * y**3
pylab.contourf(x,y,z,levels = [-1,0], colors=["red"])
pylab.gca().set_aspect("equal")
Python2.7才支持的可视化
from mayavi import mlab
import numpy as np
x, y, z = np.mgrid[-3:3:100j, -1:1:100j, -3:3:100j]
f = (x**2 + 9.0/4*y**2 + z**2 - 1)**3 - x**2 * z**3 - 9.0/80 * y**2 * z**3
contour = mlab.contour3d(x, y, z, f, contours=[0], color=(1, 0, 0))
mlab.show()
1.3.4 数据处理和分析(Pandas)
1. 3.5 界面设计
1.3.6 图像处理和计算机视觉
1.3.7 提高运算速度
只能在python2.7中调用%%cython magic 命令
#%load_ext cythonmagic
%%cython_inline
import cython
@cython.cdivision(True)
def calc_pi(int n):
cdef double pi = 0
cdef in i
for i in range(1,n,4):
pi+=4.0/i
for i in range(3,n,4):
pi -= 4.0/i
return pi
calc_pi(1000000)