NumPy:数组加法/数组比较/数组重塑/数组切片

NumPy 是 Python 中处理数组的核心工具,其灵活的操作和高效的计算能力广泛应用于数据科学。本文将分析四段 NumPy 代码的输出结果或正确性,梳理涉及的知识点,帮助读者深入理解 NumPy 的数组操作。


问题 1:数组加法分析

代码

python 复制代码
import numpy as np
arr1 = np.ones((2,2))
arr2 = np.eye(2)
print(arr1 + arr2)

选项

  • A. [[2. 1.] [1. 2.]]
  • B. [[2. 2.] [2. 2.]]
  • C. [[3. 1.] [1. 3.]]
  • D. 程序抛出异常

输出结果:

  • A. [[2. 1.] [1. 2.]]

知识点分析:

  1. np.ones((2,2))

    • 生成一个 2×2 的全 1 数组,结果为 [[1. 1.] [1. 1.]]
    • 默认数据类型为浮点数(float64)。
  2. np.eye(2)

    • 生成一个 2×2 的单位矩阵,结果为 [[1. 0.] [0. 1.]]
    • 对角线为 1,其余为 0。
  3. 数组加法

    • NumPy 支持元素级运算,arr1 + arr2 将两个形状相同的数组对应元素相加:
      • [[1. + 1., 1. + 0.], [1. + 0., 1. + 1.]] = [[2. 1.] [1. 2.]]
    • 输出为浮点数格式,与 A 一致。
  4. 错误选项分析

    • B 表示全 2,忽略了 eye 的 0 值。
    • C 的对角线值为 3,计算错误。
    • D 无异常,因为形状匹配。

问题 2:数组比较分析

代码

python 复制代码
import numpy as np
arr1 = np.random.randint(1,10,(2,3))
print(arr1 < 10)

选项

  • A. True
  • B. False
  • C. [[ True True True] [ True True True]]
  • D. [[ True False False] [False False True]]

输出结果:

  • C. [[ True True True] [ True True True]]

知识点分析:

  1. np.random.randint(1,10,(2,3))

    • 生成一个 2×3 的数组,元素为 1 到 9(不包括 10)的随机整数。
  2. 比较运算

    • arr1 < 10 对数组每个元素与 10 进行比较,返回布尔数组。
    • 因为 random.randint(1,10) 的范围是 [1, 9],所有元素都小于 10,结果为全 True 的 2×3 数组。
  3. 输出格式

    • NumPy 的布尔数组输出为 True/False,形状与原数组一致,与 C 匹配。
  4. 错误选项分析

    • A 和 B 是标量,无法表示数组比较结果。
    • D 包含 False,与随机范围不符。

问题 3:数组重塑分析

代码

python 复制代码
import numpy as np
a = np.array([1,2,3,4,5,6])
b = a.reshape((2,3))
print(b)

选项

  • A. 数组 a 是一维数组
  • B. 数组 b 是二维数组
  • C. 数组 b 是一个 2 行 3 列的数组
  • D. 程序输出结果是:array([[1, 2, 3], [4, 5, 6]])

不正确选项:

  • 无(所有选项均正确)

知识点分析:

  1. np.array([1,2,3,4,5,6])

    • 创建一个一维数组,长度为 6,a.ndim = 1,A 正确。
  2. a.reshape((2,3))

    • 将一维数组重塑为 2×3 的二维数组,b.ndim = 2,B 正确。
    • 形状为 (2, 3),即 2 行 3 列,C 正确。
    • 重塑后元素按顺序填充:[[1, 2, 3], [4, 5, 6]],D 正确。
  3. 注意事项

    • 题目问"不正确"的选项,但所有描述均符合代码行为,因此可能存在题目设计问题。假设题意为验证正确性,则全对。

问题 4:数组切片分析

代码

python 复制代码
import numpy as np
a = np.linspace(10,18,9)
a.resize((3,3))
print(a[:2,:2])

选项

  • A. [[10.]]
  • B. [[10. 11.] [13. 14.]]
  • C. [[10. 11. 12.] [13. 14. 15.] [16. 17. 18.]]
  • D. [[10. 13.] [11. 14.]]

输出结果:

  • B. [[10. 11.] [13. 14.]]

知识点分析:

  1. np.linspace(10,18,9)

    • 生成从 10 到 18 的 9 个等间隔数:
    • 步长 = (18 - 10) / (8) = 1,结果为 [10, 11, 12, 13, 14, 15, 16, 17, 18]
  2. a.resize((3,3))

    • 将 9 个元素重塑为 3×3 数组:

      lua 复制代码
      [[10, 11, 12],
       [13, 14, 15],
       [16, 17, 18]]
  3. 切片 a[:2, :2]

    • 取前 2 行(0:2)、前 2 列(0:2),结果为:

      lua 复制代码
      [[10, 11],
       [13, 14]]
    • 与 B 选项一致。

  4. 错误选项分析

    • A 仅一个元素,范围太小。
    • C 是整个数组,忽略切片。
    • D 行列顺序错误。

总结

通过分析,我们梳理了以下 NumPy 知识点:

  • 数组创建oneseyelinspacerandom.randint 的作用与输出。
  • 数组运算:元素级加法和比较返回同形状结果。
  • 形状操作reshaperesize 改变数组维度。
  • 切片:二维数组的行、列索引方法。
相关推荐
嘉友30 分钟前
Redis zset数据结构以及时间复杂度总结(源码)
数据结构·数据库·redis·后端
苏三说技术2 小时前
Excel百万数据如何快速导入?
后端
昵称为空C2 小时前
SpringBoot编码技巧-ScheduledExecutorService轮询
java·spring boot·后端
huangyingying20252 小时前
03-分支结构
后端
00后程序员2 小时前
【Flutter -- 基础组件】Flutter 导航栏
后端
bobz9652 小时前
ovs internal port 对比 veth-pair 性能
后端
Auroral1562 小时前
基于RabbitMQ的异步通知系统设计与实现
前端·后端
易元2 小时前
设计模式-代理模式
java·后端
嘻嘻哈哈开森2 小时前
Java开发工程师转AI工程师
人工智能·后端
LTPP3 小时前
自动化 Rust 开发的革命性工具:lombok-macros
前端·后端·github