NumPy 数组创建方法与区间差异分析
本文基于一段 NumPy 代码,整理了常见的数组创建方法,并深入分析了 np.arange 和 np.linspace 的区别与记忆方法,同时探讨了 NumPy 中不同 API 的开闭区间特性。
代码概览
以下是代码中涉及的 NumPy 数组创建方法:
-
创建 2 行 3 列全为 0 的二维数组
pythona1 = np.zeros((2, 3))np.zeros创建指定形状的全 0 数组,参数为形状元组。
-
创建 3 行 3 列全为 1 的二维数组
pythona2 = np.ones((3, 3))np.ones创建指定形状的全 1 数组,参数为形状元组。
-
创建 4 阶单位矩阵
pythona3 = np.eye(4)np.eye创建指定阶数的单位矩阵(主对角线为 1,其余为 0)。
-
创建一维等差数组,从 1 到 10,公差为 4
pythona4 = np.linspace(1, 10, 4)np.linspace创建等差数组,参数为起点、终点和元素个数。
-
创建一维等差数组,从 1 到 4,公差为 0.5
pythona5 = np.arange(1, 4, 0.5)np.arange创建等差数组,参数为起点、终点和公差。
-
创建 2 行 3 列的随机数组
pythonnp.random.seed(0) # 设置随机种子 a6 = np.random.rand(2, 3)np.random.rand创建指定形状的随机数组,元素值在 [0, 1) 区间。
-
创建 3 行 4 列的随机整数数组,范围为 [10, 51)
pythona7 = np.random.randint(10, 51, size=(3, 4))np.random.randint创建指定范围和形状的随机整数数组。
重点分析:np.arange 与 np.linspace 的差异与记忆方法
差异
-
np.arange(start, stop, step)-
参数:起点、终点(不包含)、步长。
-
区间 :左闭右开
[start, stop)。 -
特点 :通过指定步长(
step)控制数组的间隔,元素个数由(stop - start) / step决定(向上取整)。 -
示例 :
pythona5 = np.arange(1, 4, 0.5) # 结果:[1.0, 1.5, 2.0, 2.5, 3.0, 3.5]- 从 1 开始,每次增加 0.5,直到小于 4(不包含 4)。
-
-
np.linspace(start, stop, num)-
参数:起点、终点(包含)、元素个数。
-
区间 :左闭右闭
[start, stop]。 -
特点 :通过指定元素个数(
num),自动计算步长,步长为(stop - start) / (num - 1)。 -
示例 :
pythona4 = np.linspace(1, 10, 4) # 结果:[1.0, 4.0, 7.0, 10.0]- 从 1 到 10,共 4 个元素,等分为 3 段,步长为
(10 - 1) / (4 - 1) = 3。
- 从 1 到 10,共 4 个元素,等分为 3 段,步长为
-
记忆方法
-
参数核心区别:
np.arange的第三个参数是步长 (step),强调"间隔多大"。np.linspace的第三个参数是个数 (num),强调"要多少个点"。- 记忆口诀 :
arange爱"步长"(range 类似 Python 的range,步长驱动);linspace爱"个数"(linear space,线性划分空间,指定点数)。
-
区间特性:
np.arange类似 Python 的range,右端点不包含(左闭右开)。np.linspace强调线性插值,包含两端(左闭右闭)。- 记忆口诀 :
arange右边"开",linspace两端"闭"。
使用场景
- 如果需要控制步长 ,且不在意具体元素个数,用
np.arange。 - 如果需要固定元素个数 ,且希望包含终点,用
np.linspace。
NumPy 中不同 API 的开闭区间差异
NumPy 中不同函数的区间定义可能不同,理解这些差异有助于避免错误:
-
np.arange(start, stop, step)- 区间:
[start, stop),右端点不包含。 - 示例:
np.arange(1, 4, 0.5)不包含 4。
- 区间:
-
np.linspace(start, stop, num)- 区间:
[start, stop],包含两端。 - 示例:
np.linspace(1, 10, 4)包含 10。
- 区间:
-
np.random.rand和np.random.uniform- 区间:
[0, 1)(rand)或[low, high)(uniform),右端点不包含。 - 示例:
np.random.rand(2, 3)生成的值在[0, 1)。
- 区间:
-
np.random.randint(low, high, size)- 区间:
[low, high),右端点不包含。 - 示例:
np.random.randint(10, 51, size=(3, 4))生成的值在[10, 51),不包含 51。
- 区间:
记忆方法
- 右端点不包含 是 NumPy 中常见的默认行为(如
np.arange、np.random.randint),因为这与 Python 的range行为一致,方便循环和索引。 - 两端包含 通常出现在需要明确定义边界的情况下(如
np.linspace),因为它更符合数学上的线性插值需求。 - 记忆口诀 :随机函数(
rand、randint)和arange右边"开",线性插值(linspace)两端"闭"。
总结
np.arange和np.linspace是创建等差数组的常用方法,区别在于参数(步长 vs 个数)和区间(右开 vs 两端闭)。- NumPy 中不同 API 的开闭区间特性需要注意,尤其是随机函数和
arange的右端点不包含行为。 - 通过口诀和使用场景,可以更轻松地记忆和选择合适的函数。
希望这篇博客对你理解 NumPy 数组创建方法有所帮助!