2. 使用arange和linspace生成序列
任务说明
本案例使用NumPy的arange和linspace两个函数生成序列,并对比两者在参数含义、步长计算和元素个数上的差异。完成本案例后,你将能够根据实际需求选择合适的序列生成方式。
核心实现
首先导入NumPy库,然后分别用arange和linspace生成序列,并输出结果及关键属性(数据类型、元素个数、步长)。
import numpy as np
# 1. 使用 arange 生成等差序列(指定步长)
# 参数:start, stop(不含), step
arr_arange = np.arange(0, 1, 0.2)
print("arange(0, 1, 0.2):")
print(" 序列:", arr_arange)
print(" 元素个数:", arr_arange.size)
print(" 数据类型:", arr_arange.dtype)
# 2. 使用 linspace 生成等间隔序列(指定个数)
# 参数:start, stop(含), num
arr_linspace = np.linspace(0, 1, 5)
print("\nlinspace(0, 1, 5):")
print(" 序列:", arr_linspace)
print(" 元素个数:", arr_linspace.size)
print(" 数据类型:", arr_linspace.dtype)
# 3. 计算实际步长(相邻元素差值)
step_arange = np.diff(arr_arange)
step_linspace = np.diff(arr_linspace)
print("\n步长对比:")
print(" arange 相邻差值:", step_arange)
print(" linspace 相邻差值:", step_linspace)
# 4. 验证 linspace 是否包含终点
print("\n包含终点验证:")
print(" arange 是否包含 1.0:", 1.0 in arr_arange)
print(" linspace 是否包含 1.0:", 1.0 in arr_linspace)
差异分析
从输出结果可以看到:arange(0, 1, 0.2)生成的序列为[0. , 0.2, 0.4, 0.6, 0.8],不包含终点1.0,共5个元素,步长固定为0.2;linspace(0, 1, 5)生成的序列为[0. , 0.25, 0.5, 0.75, 1. ],包含终点1.0,共5个元素,步长为0.25。两者的核心区别在于:arange以步长为驱动,元素个数由区间长度和步长自动决定(可能因浮点误差导致元素个数与预期不符);linspace以元素个数为驱动,自动计算等间隔步长并保证包含终点。
SVG:序列生成对比图
运行与验证
将上述代码保存为sequence_generation.py,在已安装NumPy的Python环境中运行:
python sequence_generation.py
预期输出:
arange(0, 1, 0.2):
序列: [0. 0.2 0.4 0.6 0.8]
元素个数: 5
数据类型: float64
linspace(0, 1, 5):
序列: [0. 0.25 0.5 0.75 1. ]
元素个数: 5
数据类型: float64
步长对比:
arange 相邻差值: [0.2 0.2 0.2 0.2]
linspace 相邻差值: [0.25 0.25 0.25 0.25]
包含终点验证:
arange 是否包含 1.0: False
linspace 是否包含 1.0: True
判定标准:若输出与上述预期一致,且arange序列不含终点1.0、linspace序列包含终点1.0,则案例验证通过。注意arange的浮点步长可能因精度问题导致元素个数与理论值有偏差,这是正常现象,实际使用时若需精确控制个数应优先选择linspace。