Chapter 1: Python 科学计算环境的安装与简介

时间:2021-08-11 08:02:25

第一章 Python 科学计算环境的安装与简介

1.1 Python 简介

1.2 IPython Notebook 入门

1.2.1 基本操作

3 安装 MathJax

eiπ+1=0

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:

pi=2111x2dx

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")

Chapter 1: Python 科学计算环境的安装与简介

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)