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 数组创建方法有所帮助!