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:序列生成对比图

arange vs linspace 序列对比 arange(0,1,0.2) 步长驱动,不含终点 0.0 0.2 0.4 0.6 0.8 1.0 (不含) 步长=0.2 linspace(0,1,5) 个数驱动,含终点 0.0 0.25 0.5 0.75 1.0 步长=0.25 arange linspace

运行与验证

将上述代码保存为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。