范围
范围是一个按递增或递减顺序排列的数字数组,每两个数之间间隔固定步长。 范围在大量场景中都出乎意料地有用,因此值得学习。
范围使用 np.arange 函数定义,该函数接受一个、两个或三个参数:起始值、结束值和步长。
如果只向 np.arange 传递一个参数,则该参数成为 end 值,start=0、step=1 为默认值。两个参数给出 start 和 end,step=1 为默认值。三个参数则显式给出 start、end 和 step。
一个范围总是包含其 start 值,但不包含其 end 值。它按 step 递增计数,并在到达 end 之前停止。
np.arange(end): 一个从 0 开始的递增连续整数数组,在 end 之前停止。
import numpy as np
path_data = '../../../assets/data/'
np.arange(5)
array([0, 1, 2, 3, 4])注意数组从 0 开始,只到 4 为止,而不是到结束值 5。
np.arange(start, end): 从 start 开始的连续递增整数数组,在 end 之前停止。
np.arange(3, 9)
array([3, 4, 5, 6, 7, 8])np.arange(start, end, step): 一个范围,每对连续值之间的差值为 step,从 start 开始,在 end 之前停止。
np.arange(3, 30, 5)
array([ 3, 8, 13, 18, 23, 28])该数组从 3 开始,然后步进 5 到达 8,再步进 5 到达 13,依此类推。
当你指定步长时,起始值、结束值和步长都可以为正数或负数,也可以是整数或分数。
np.arange(1.5, -2, -0.5)
array([ 1.5, 1. , 0.5, 0. , -0.5, -1. , -1.5])示例:莱布尼茨的 $\pi$ 公式
伟大的德国数学家和哲学家 戈特弗里德·威廉·莱布尼茨 (1646-1716)发现了一个关于 $\pi$ 的精妙公式,将其表示为简单分数的无穷级数。该公式是
$$\pi = 4 \cdot \left(1 - \frac{1}{3} + \frac{1}{5} - \frac{1}{7} + \frac{1}{9} - \frac{1}{11} + \dots\right)$$
虽然需要一些数学知识来证明这个公式,但我们可以使用数组让自己相信该公式的正确性。让我们计算莱布尼茨无穷级数的前 5000 项,看看它是否接近 $\pi$。
$$4 \cdot \left(1 - \frac{1}{3} + \frac{1}{5} - \frac{1}{7} + \frac{1}{9} - \frac{1}{11} + \dots - \frac{1}{9999} \right)$$
我们将先加所有正项,再减去所有负项的和,来计算这个有限和 [1]:
$$4 \cdot \left( \left(1 + \frac{1}{5} + \frac{1}{9} + \dots + \frac{1}{9997} \right) - \left(\frac{1}{3} + \frac{1}{7} + \frac{1}{11} + \dots + \frac{1}{9999} \right) \right)$$
该求和中的正项分母为 1、5、9 等。数组 by_four_to_20 包含这些数,最大到 17:
by_four_to_20 = np.arange(1, 20, 4)
by_four_to_20
array([ 1, 5, 9, 13, 17])为了获得 $\pi$ 的精确近似值,我们将使用更长的数组 positive_term_denominators。
positive_term_denominators = np.arange(1, 10000, 4)
positive_term_denominators
array([ 1, 5, 9, ..., 9989, 9993, 9997])我们实际要相加的正项就是这些分母的倒数:
positive_terms = 1 / positive_term_denominators
负项的分母为 3、7、11 等。该数组就是 positive_term_denominators 加上 2。
negative_terms = 1 / (positive_term_denominators + 2)
总和是
4 * ( sum(positive_terms) - sum(negative_terms) )
3.1413926535917955这与 $\pi = 3.14159\dots$ 非常接近。莱布尼茨公式看起来不错!
(footnotes)=
脚注
[1] 令人惊讶的是,当我们将无穷多个正分数和负分数相加时,顺序确实会起作用!但我们求 $\pi$ 的近似值只用了大量有限的分数,因此按任意方便的顺序相加都是可以的。