Numpy:数组的范围创建/变形/转置/展平

NumPy 数组操作详解与考试重点

NumPy 是 Python 中用于科学计算的核心库之一,特别是在数组操作方面非常强大。本文将通过一个简单的 NumPy 代码示例,详细解析数组的创建、变形和展平操作,同时指出在学习和考试中容易忽视的重点。

代码解析

以下是代码的逐行分析:

python 复制代码
# 导入 NumPy 模块
import numpy as np

# 创建一维数组 [0 1 2 3 4 5 6 7 8 9 10 11]
a1 = np.arange(12)

# 将一维数组变形为 3 行 4 列的二维数组
a2 = a1.reshape(3, 4)

# 将一维数组变形为 4 行 3 列的二维数组
a3 = a1.reshape(4, 3)

# 转置操作
a4 = a3.T

# 展平操作(将多维数组变为一维)
a5 = a4.flatten()

# 输出结果
print(a1)
print(a2)
print(a3)
print(a4)
print(a5)

输出结果

运行上述代码后,输出如下:

  • a1[ 0 1 2 3 4 5 6 7 8 9 10 11]

  • a2

    lua 复制代码
    [[ 0  1  2  3]
     [ 4  5  6  7]
     [ 8  9 10 11]]
  • a3

    lua 复制代码
    [[ 0  1  2]
     [ 3  4  5]
     [ 6  7  8]
     [ 9 10 11]]
  • a4a3 的转置):

    lua 复制代码
    [[ 0  3  6  9]
     [ 1  4  7 10]
     [ 2  5  8 11]]
  • a5(展平后的结果):[ 0 1 2 3 4 5 6 7 8 9 10 11]

代码功能详解

  1. 创建数组:np.arange(12)

    • np.arange(12) 创建一个从 0 到 11 的一维数组,步长为 1。
    • 这是 NumPy 中常用的数组生成方法,类似于 Python 的 range(),但返回的是一个 NumPy 数组。
  2. 数组变形:reshape()

    • a2 = a1.reshape(3, 4) 将一维数组 a1 变形为 3 行 4 列的二维数组。
    • a3 = a1.reshape(4, 3) 将一维数组 a1 变形为 4 行 3 列的二维数组。
    • 注意:reshape() 要求新形状的元素总数必须与原数组一致(这里是 12)。
  3. 转置操作:.T

    • a4 = a3.T 对数组 a3 进行转置操作,将 4 行 3 列的数组变为 3 行 4 列。
    • 转置操作会交换数组的行和列。
  4. 展平操作:flatten()

    • a5 = a4.flatten() 将多维数组 a4 展平为一维数组。
    • 展平后的结果与原始数组 a1 相同。

考试中容易忽视的重点

在学习 NumPy 数组操作时,以下几点是考试中容易忽视的重点:

  1. 数组形状的匹配问题

    • 使用 reshape() 时,新形状的元素总数必须与原数组一致。例如,a1 有 12 个元素,因此可以变形为 (3, 4)(4, 3),但不能变形为 (3, 5)(因为 3×5=15,不匹配)。
    • 考试陷阱:如果题目要求将数组变形为不匹配的形状,可能会导致错误。需要熟练计算元素总数。
  2. 转置操作的理解

    • 转置操作 .T 会交换数组的行和列。例如,a3 是 4 行 3 列,转置后变为 3 行 4 列。
    • 容易忽视:转置操作对一维数组无效(因为一维数组没有行列概念)。如果题目中涉及一维数组的转置,可能会让人误以为会有变化。
  3. 展平操作的两种方法

    • 代码中使用了 flatten(),但 NumPy 还提供了 ravel() 方法,两者都能将多维数组展平为一维。
    • 区别flatten() 总是返回一个新的数组(深拷贝),而 ravel() 返回的是视图(浅拷贝),如果原数组发生变化,ravel() 的结果也可能随之改变。
    • 考试重点 :题目可能会要求区分 flatten()ravel() 的行为,尤其是在内存管理和性能优化方面。
  4. 数组的视图与拷贝

    • reshape().T 返回的通常是视图(view),而不是新数组。这意味着对 a2a3 的修改可能会影响原始数组 a1
    • 容易忽视 :如果题目要求修改变形后的数组,同时保持原数组不变,需要使用 .copy() 创建一个深拷贝。
  5. 数组的维度和形状

    • 理解数组的形状(shape)和维度(ndim)非常重要。例如,a1 是一维数组,a2 是二维数组。
    • 考试陷阱:题目可能会要求输出数组的形状或维度,或者在变形操作后判断新数组的形状。

总结

通过上述代码,我们学习了 NumPy 中数组的创建、变形、转置和展平操作。这些操作是 NumPy 的核心功能,在数据处理和科学计算中非常常见。在考试中,重点关注数组形状的匹配、转置操作的适用场景、flatten()ravel() 的区别,以及视图与拷贝的概念。熟练掌握这些知识点,可以帮助你在考试中避免常见错误,取得更好的成绩。

相关推荐
why1514 小时前
腾讯(QQ浏览器)后端开发
开发语言·后端·golang
浪裡遊4 小时前
跨域问题(Cross-Origin Problem)
linux·前端·vue.js·后端·https·sprint
声声codeGrandMaster4 小时前
django之优化分页功能(利用参数共存及封装来实现)
数据库·后端·python·django
呼Lu噜4 小时前
WPF-遵循MVVM框架创建图表的显示【保姆级】
前端·后端·wpf
bing_1584 小时前
为什么选择 Spring Boot? 它是如何简化单个微服务的创建、配置和部署的?
spring boot·后端·微服务
学c真好玩5 小时前
Django创建的应用目录详细解释以及如何操作数据库自动创建表
后端·python·django
Asthenia04125 小时前
GenericObjectPool——重用你的对象
后端
Piper蛋窝5 小时前
Go 1.18 相比 Go 1.17 有哪些值得注意的改动?
后端
excel5 小时前
招幕技术人员
前端·javascript·后端
盖世英雄酱581365 小时前
什么是MCP
后端·程序员