写一些关于数学的代码,和开发程序是两种不同的感觉。接下来是一些我个人常用的 Tips。
Sum
求和符号频繁的出现在各种公式里面。比如 Composite Simpson Rule:
\(\int^a_b f(x)dx = \frac{h}{3}(f(a)+f(b)+4\sum^{n/2}_{i=1}f(a+(2i-1)h)+2\sum^{(n-2)/2}_{i=1}f(a+2ih))\)
我之前看到求和符号的第一反应是这儿又得用 for loop
了。例如 \(\sum^{n/2}_{i=1}f(a+(2i-1)h)\) 可能会用以下的代码来计算。
1 | sum=0 |
这是一个有点冗长,不清楚的写法。
Map
我们可以用 np.sum
和 map
函数来实现。
1 | import numpy as np |
瞬间把之前的几行代码压缩成了一行。这样写的坏处是括号比较多,在没有括号高亮的情况下容易出现漏括号或者多括号的情况。
Vectorize
这个方法全靠 Numpy。
1 | import numpy as np |
这个思路感觉和 map
的思路类似,但是优势是创建了一个可以复用的 Vectorize Function,可以接受数组的输入。
Another For Loop
这个其实和 for loop
没什么区别,知识短了一点。
1 | import numpy as np |
这个方法会比较灵活。在面对多个参数的时候会比较好用。比如有一个函数 f(a,b,c,d), 只有 c 这个参数需要变化,a,b,d 都是不要变化的。我们可以写这样写:
1 | import numpy as np |
矩阵点乘
这里我们用一个简单一点的例子。我们需要计算\(\sum_{i=0}^{n}a_ib_i\)。这个的本质其实是 a 和 b 两个矩阵的点乘。
1 | a=[...] |
快速生成一个矩阵
这个很简单。例如生成一个 5*5 矩阵。
1 | import numpy as np |
Table
Tabulate
1 | print(tabulate([["Name","Age"],["Alice",24],["Bob",19]],headers="firstrow")) |
1 | print(tabulate({"Name": ["Alice", "Bob"], |
Plotly
1 | import plotly.graph_objects as go |
Plot
我每次都记不住怎么画图。
matplotlib
1 | import matplotlib.pyplot as plt |
伪代码翻译
数组的索引从 0 开始,但是很多伪代码是从 1 开始。为了方便翻译,我们可以在所有数组的开头插入一个 0,这样数组的有效数据便从索引 1 开始。这样伪代码和实际代码之间的索引便不会错了。以下为例子。

1 | import numpy as np |