NumPy 从数值范围创建数组¶
范围构造函数用于生成规则序列、采样点、网格坐标和对数刻度。应根据“固定步长”还是“固定样本数”选择 API。
核心 API¶
| API | 规则 |
|---|---|
np.arange(start, stop, step) |
使用固定步长,通常不包含 stop |
np.linspace(start, stop, num) |
生成固定数量的等间距样本,默认包含终点 |
np.logspace(start, stop, num, base) |
指数在给定范围内等间距 |
np.geomspace(start, stop, num) |
直接指定首尾值的等比序列 |
np.meshgrid |
从坐标向量生成坐标网格 |
可运行示例¶
import numpy as np
integers = np.arange(0, 10, 2)
samples, step = np.linspace(0.0, 1.0, num=5, retstep=True)
frequencies = np.logspace(1, 3, num=3, base=10)
ratio = np.geomspace(1, 1000, num=4)
print(integers)
print(samples, step)
print(frequencies)
print(ratio)
生成二维坐标并计算函数值:
import numpy as np
x = np.linspace(-1, 1, 5)
y = np.linspace(-1, 1, 3)
xx, yy = np.meshgrid(x, y, indexing="xy")
z = xx**2 + yy**2
print(z)
端点与精度¶
浮点步长不能精确表示时,arange 的元素数量和末端值可能与直觉不同。需要固定样本数或可靠端点时优先使用 linspace,并显式设置 endpoint=False 表达半开区间。
常见错误与性能注意事项¶
- 不要用
np.arange的浮点结果做严格相等判断;使用np.isclose或基于整数索引构造。 linspace(..., num=n)的num是样本数,不是步长;样本间隔通常为(stop-start)/(n-1)。meshgrid会创建大坐标数组。只为广播计算时可用x[None, :]和y[:, None],或设置sparse=True。- 整数
arange仍受 dtype 范围限制,大端点可能溢出;需要时显式选择int64并检查规模。 geomspace的区间跨过零时没有实数等比序列,会报错或需要复数 dtype。- 外部参数控制范围时,应先计算预计元素数,防止极小步长造成内存耗尽。