jupyter notebook常见命令
PS:以下命令都是在命令输入状态下,也即按ESC之后
- A:在单元格上方插入新单元格
- B:在单元格下方插入新单元格
- X:剪切选中的单元格
- C:复制选中的单元格
- V:粘贴单元格
- Z:撤销
- M:切换到Markdown输入模式
- Y:切换到代码模式
- Shift/Ctrl+Enter:执行代码,Shift会在执行完之后在下方新建一个单元格(cell)
- Shift+Up/Down:选择上方/下方的cell,可多选
- Enter:切换到输入代码模式
- ESC:切换到命令模式
- %who:查看当前所有变量
- %who type:查看type类型的变量,如%who list
example1:随机漫步
from random import choice
import matplotlib.pyplot as plt
class RandomWalk():
# 定义一个随机行走的类
def __init__(self, num_points=5000):
self.x_values = [0]
self.y_values = [0]
self.num_points = num_points
def fill_walk(self):
# 利用循环来随机填充点
while len(self.x_values) < self.num_points:
x_direction = choice([-1, 1])
x_distance = choice([0, 1, 2, 3, 4, 5])
x_step = x_direction*x_distance
y_direction = choice([-1, 1])
y_distance = choice([0, 1, 2, 3, 4, 5])
y_step = y_direction*y_distance
if x_step == 0 and y_step == 0:
# 若遇到(0,0)零点则重来
continue
next_x = self.x_values[-1]+x_step
next_y = self.y_values[-1]+y_step
self.x_values.append(next_x)
self.y_values.append(next_y)
while True:
# 在不关闭窗口的情况下一直生成随机点
rw = RandomWalk()
rw.fill_walk()
point_numbers = list(range(rw.num_points))
plt.scatter(rw.x_values, rw.y_values, c=point_numbers,
cmap=plt.cm.Blues, edgecolor='none', s=15)
plt.show()
keep_running = input('Make another walk?(y/n):')
if keep_running == 'n':
break
Make another walk?(y/n):y
Make another walk?(y/n):n
example2:符号运算
python的符号运算是利用sympy库来实现的。
符号数的定义
第2、3种定义方式都是定义出x,y符号变量
还可以指定符号变量的类型:整型、实型、复数等。
import sympy as sy
x = sy.Symbol('x')
y = sy.Symbol('y')
k, m, n = sy.symbols('k,m,n',integer=True)
#指定k,m,n为整型
sy.var('z,h')
%who Symbol
h k m n x y z
数学函数的定义
这实际上是创建了一个类y,该类继承自Function类。而使用y如y(t)相当于创建了y的一个实例,该实例还可以作为整体参与运算
import sympy as sy
f=sy.Function('f')
t=f(x,y)
t**3+2*t
求解方程组
求解一元一次方程组
from sympy import *
x = Symbol('x')
e = solve(5*x+x-4, x)
print(e)
[2/3]
求解二元、三元一次方程组
from sympy import *
x, y, z = symbols('x,y,z')
e = solve([x+y-2, x-y+3], [x, y])
print('x={},y={}'.format(e[x], e[y]))
print(solve([x+y+z, x-y-z-3, x+y-z+6], [x, y, z]))
# print('e1={},e2={},e3={}'.format(e1,e2,e3))
x=-1/2,y=5/2
{x: 3/2, y: -9/2, z: 3}
一元二次方程的求解
from sympy import *
x=Symbol('x')
e=solve(x**2-3*x+1,x)
print('x1={},x2={}'.format(e[0],e[1]))
x1=3/2 - sqrt(5)/2,x2=sqrt(5)/2 + 3/2
微积分
求极限
limit运算符:limit(expr,x,a)
表示求
from sympy import *
x = Symbol('x')
e = limit(sin(x)/x, x, 0)
print(e)
1
求微分
diff运算符:
import sympy as sy
x=sy.Symbol('x')
f=x**2*sy.sin(x)
sy.diff(f,x,2)
解微分方程
expr=0,求解y(x)
注意:这个y要事先定义为y=sympy.Function('y')
import sympy as sy
x=sy.Symbol('x',real=True)
y=sy.Function('y')
sy.dsolve(y(x).diff(x)+y(x)**2+y(x),y(x))
计算定积分
import sympy as sy
x=sy.Symbol('x')
sy.integrate(x**2*sy.sin(x),(x,0,1))
计算不定积分
import sympy as sy
x=sy.Symbol('x')
sy.integrate(x**2*sy.sin(x),x)
计算双重积分
import sympy as sy
x,y=sy.symbols('x,y')
sy.integrate(3/4*x+2*y*x,(x,0,1),(y,-3,4))
计算双重不定积分
import sympy as sy
x,y=sy.symbols('x,y')
sy.integrate(x*y,x,y)
算式替换
将expr表达式中的x替换为y.还可以同时进行多个字母的替换
但注意以上的操作都不会影响原表达式expr的额值,只是返回一个替换了的表达式
import sympy as sy
x,y=sy.symbols('x,y')
f=x**2+1
print(f.subs(x,y))
print(f)
y**2 + 1
x**2 + 1