NumPy 数组创建方法与区间差异分析

NumPy 数组创建方法与区间差异分析

本文基于一段 NumPy 代码,整理了常见的数组创建方法,并深入分析了 np.arangenp.linspace 的区别与记忆方法,同时探讨了 NumPy 中不同 API 的开闭区间特性。

代码概览

以下是代码中涉及的 NumPy 数组创建方法:

  1. 创建 2 行 3 列全为 0 的二维数组

    python 复制代码
    a1 = np.zeros((2, 3))
    • np.zeros 创建指定形状的全 0 数组,参数为形状元组。
  2. 创建 3 行 3 列全为 1 的二维数组

    python 复制代码
    a2 = np.ones((3, 3))
    • np.ones 创建指定形状的全 1 数组,参数为形状元组。
  3. 创建 4 阶单位矩阵

    python 复制代码
    a3 = np.eye(4)
    • np.eye 创建指定阶数的单位矩阵(主对角线为 1,其余为 0)。
  4. 创建一维等差数组,从 1 到 10,公差为 4

    python 复制代码
    a4 = np.linspace(1, 10, 4)
    • np.linspace 创建等差数组,参数为起点、终点和元素个数。
  5. 创建一维等差数组,从 1 到 4,公差为 0.5

    python 复制代码
    a5 = np.arange(1, 4, 0.5)
    • np.arange 创建等差数组,参数为起点、终点和公差。
  6. 创建 2 行 3 列的随机数组

    python 复制代码
    np.random.seed(0)  # 设置随机种子
    a6 = np.random.rand(2, 3)
    • np.random.rand 创建指定形状的随机数组,元素值在 [0, 1) 区间。
  7. 创建 3 行 4 列的随机整数数组,范围为 [10, 51)

    python 复制代码
    a7 = np.random.randint(10, 51, size=(3, 4))
    • np.random.randint 创建指定范围和形状的随机整数数组。

重点分析:np.arangenp.linspace 的差异与记忆方法

差异

  • np.arange(start, stop, step)

    • 参数:起点、终点(不包含)、步长。

    • 区间 :左闭右开 [start, stop)

    • 特点 :通过指定步长(step)控制数组的间隔,元素个数由 (stop - start) / step 决定(向上取整)。

    • 示例

      python 复制代码
      a5 = 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)

    • 示例

      python 复制代码
      a4 = np.linspace(1, 10, 4)
      # 结果:[1.0, 4.0, 7.0, 10.0]
      • 从 1 到 10,共 4 个元素,等分为 3 段,步长为 (10 - 1) / (4 - 1) = 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 中不同函数的区间定义可能不同,理解这些差异有助于避免错误:

  1. np.arange(start, stop, step)

    • 区间:[start, stop),右端点不包含。
    • 示例:np.arange(1, 4, 0.5) 不包含 4。
  2. np.linspace(start, stop, num)

    • 区间:[start, stop],包含两端。
    • 示例:np.linspace(1, 10, 4) 包含 10。
  3. np.random.randnp.random.uniform

    • 区间:[0, 1)rand)或 [low, high)uniform),右端点不包含。
    • 示例:np.random.rand(2, 3) 生成的值在 [0, 1)
  4. np.random.randint(low, high, size)

    • 区间:[low, high),右端点不包含。
    • 示例:np.random.randint(10, 51, size=(3, 4)) 生成的值在 [10, 51),不包含 51。

记忆方法

  • 右端点不包含 是 NumPy 中常见的默认行为(如 np.arangenp.random.randint),因为这与 Python 的 range 行为一致,方便循环和索引。
  • 两端包含 通常出现在需要明确定义边界的情况下(如 np.linspace),因为它更符合数学上的线性插值需求。
  • 记忆口诀 :随机函数(randrandint)和 arange 右边"开",线性插值(linspace)两端"闭"。

总结

  • np.arangenp.linspace 是创建等差数组的常用方法,区别在于参数(步长 vs 个数)和区间(右开 vs 两端闭)。
  • NumPy 中不同 API 的开闭区间特性需要注意,尤其是随机函数和 arange 的右端点不包含行为。
  • 通过口诀和使用场景,可以更轻松地记忆和选择合适的函数。

希望这篇博客对你理解 NumPy 数组创建方法有所帮助!

相关推荐
小杨40439 分钟前
springboot框架项目实践应用十五(扩展sentinel区分来源)
spring boot·后端·spring cloud
FirstMrRight1 小时前
自动挡线程池OOM最佳实践
java·后端
程序员清风1 小时前
Redis Pipeline 和 MGET,如果报错了,他们的异常机制是什么样的?
java·后端·面试
审计侠2 小时前
Go语言-初学者日记(四):包管理
开发语言·后端·golang
Aska_Lv2 小时前
Linux---jstat命令的作用
后端
嘻嘻哈哈开森2 小时前
从零开始学习模型蒸馏
人工智能·后端
DataFunTalk3 小时前
大模型时代数据科学岗位的未来思考
前端·后端·算法
阮瑭雅3 小时前
Java语言的Web安全
开发语言·后端·golang
编程乐趣3 小时前
UnitOfWork:一个支持多数据库,工作单元模式、支持分布式事务以及支持 MySQL 多数据库/表分片的开源项目
后端