DAY 16 数组的常见操作和形状

核心概念

1. 数组维度(Dimensions)

NumPy数组的维度通过中括号嵌套层数来判断:

  • 一层 []:一维数组(1D)
  • 两层 []:二维数组(2D)
  • 三层 []:三维数组(3D)

2. NumPy与深度学习的关系

NumPy数组可以看作是PyTorch或TensorFlow中Tensor的基础版本。掌握NumPy操作能大大降低学习深度学习框架的难度。

数组创建

基础创建方法

复制代码
import numpy as np

# 一维数组
a = np.array([2, 4, 6, 8, 10, 12])

# 二维数组
b = np.array([[2, 4, 6], [8, 10, 12]])

# 查看数组形状
a.shape  # (6,)
b.shape  # (2, 3)

特殊数组创建

复制代码
# 全零矩阵
zeros = np.zeros((2, 3))

# 全1数组
ones = np.ones((3,))

# 顺序数组
arange = np.arange(1, 10)  # [1, 2, 3, ..., 9]

随机数组创建

|--------------------------|-----------|---------|---------------------|
| 方法 | 范围 | 用途 | 记忆口诀 |
| np.random.randint(a,b) | a,b整数 | 随机索引/标签 | int=整数 |
| random.random() | [0,1)浮点 | 简单概率 | 最基础 |
| np.random.rand() | [0,1)均匀 | 蒙特卡洛模拟 | rand=random+uniform |
| np.random.randn() | 标准正态分布 | 深度学习初始化 | n=normal |

复制代码
# 标准正态分布(均值0,标准差1)
c = np.random.randn(2, 2)

# 指定均值和标准差的正态分布
scores = np.random.normal(75, 10, 10)

数组运算

基础运算

复制代码
a = np.array([[1, 2], [3, 4], [5, 6]])
b = np.array([[7, 8], [9, 10], [11, 12]])

# 逐元素运算
a + b  # 对应位置相加
a - b  # 对应位置相减
a * b  # 对应位置相乘(点乘)
a / b  # 对应位置相除

矩阵运算

复制代码
# 矩阵乘法(需要满足维度要求)
a @ b.T  # 3x2 与 2x3 相乘,得到 3x3

# 矩阵转置
a.T

数组索引

一维数组索引

复制代码
arr1d = np.arange(10)  # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

# 单个元素
arr1d[0]      # 第一个元素:0
arr1d[-1]     # 最后一个元素:9

# 多个元素
arr1d[[3, 5, 8]]  # 取索引为3,5,8的元素

# 切片
arr1d[2:6]    # 取索引2到5的元素:[2, 3, 4, 5]
arr1d[:5]     # 从头到索引5:[0, 1, 2, 3, 4]
arr1d[4:]     # 从索引4到末尾:[4, 5, 6, 7, 8, 9]
arr1d[::2]    # 每隔一个取一个:[0, 2, 4, 6, 8]

二维数组索引

复制代码
arr2d = np.array([[1, 2, 3, 4],
                  [5, 6, 7, 8],
                  [9, 10, 11, 12],
                  [13, 14, 15, 16]])

# 行列顺序:第一个索引是行,第二个是列

# 取整行
arr2d[1, :]   # 第1行的所有元素
arr2d[1]      # 同上,可以省略:

# 取整列
arr2d[:, 2]   # 第2列的所有元素

# 取单个元素
arr2d[2, 3]   # 第2行第3列的元素:12

# 取多行
arr2d[[0, 2], :]  # 第0行和第2行

# 取多列
arr2d[:, [1, 3]]  # 第1列和第3列

# 取子矩阵
arr2d[1:3, 1:3]   # 第1-2行,第1-2列

三维数组索引

复制代码
arr3d = np.arange(3 * 4 * 5).reshape((3, 4, 5))

# 取某一层
arr3d[1, :, :]    # 第1层的所有数据

# 取某一层的部分行
arr3d[1, 0:2, :]  # 第1层的前两行

# 取某一层的子矩阵
arr3d[1, 0:2, 2:4]  # 第1层的前两行,第2-3列

数组属性

复制代码
arr = np.array([[1, 2, 3], [4, 5, 6]])

# 形状
arr.shape      # (2, 3)

# 维度数
arr.ndim       # 2

# 元素总数
arr.size       # 6

# 数据类型
arr.dtype      # dtype('int64')

常用函数

复制代码
arr = np.array([5, 9, 9, 11, 11, 13, 15, 19])

# 统计函数
np.max(arr)    # 最大值
np.min(arr)    # 最小值
np.argmax(arr) # 最大值的索引
np.argmin(arr) # 最小值的索引
np.sum(arr)    # 求和
np.mean(arr)   # 平均值
np.std(arr)    # 标准差

总结

  • NumPy数组是Python中进行数值计算的基础
  • 理解数组维度和索引是使用NumPy的关键
  • 掌握NumPy操作能为后续深度学习学习打下基础
  • 数组运算比Python列表快得多,适合处理大规模数据
相关推荐
制造业的搬运工12 分钟前
AI服务器背板与传统背板差异:三大设计升级解析
运维·服务器·人工智能·科技·制造·pcb工艺
hughnz26 分钟前
石油工程的端到端数字化转型:演化还是革命
大数据·人工智能·科技
xiao5kou4chang6kai430 分钟前
AI-XGBoost机器学习与生态—植被与土地利用识别、土壤碳氮空间预测、生物多样性驱动机制、土壤微生物功能预测、生态退化与风险识
人工智能·机器学习·生态·xgboost·地学
龙亘川30 分钟前
旅游强国建设|一网统管智慧旅游服务模块,赋能节假日文旅数字化治理
大数据·数据库·人工智能·科技·智慧城市·旅游
Microvision维视智造33 分钟前
产品尺寸一年一换,视觉系统能跟几次?
人工智能·计算机视觉·机器人·视觉检测·机器视觉
@嵌入式扫地僧34 分钟前
TFLite Micro STM32/ESP32 开箱即用推理骨架 + INT8 量化脚本实战:零调试跑通端侧 AI 推理完整步骤
人工智能·嵌入式硬件·tinyml·端侧ai·tflite micro
IT_陈寒38 分钟前
JavaScript的这个隐式转换特性差点让我加班到凌晨
前端·人工智能·后端
byte轻骑兵38 分钟前
【BlueZ 】hci 模块:用户态 HCI 层的核心封装与消息处理
linux·人工智能·bluez·电脑蓝牙·嵌入式蓝牙
计算机编程-吉哥39 分钟前
脑肿瘤MRI智能识别系统:基于深度学习的像素级脑肿瘤语义分割平台【计算机毕业设计选题推荐】
人工智能·python·深度学习·算法·毕业设计·课程设计·大数据毕业设计选题推荐
小木_.42 分钟前
Python 离线识别滑块缺口距离,项目推荐
开发语言·python·滑块识别·人机验证·滑块缺口·缺口识别