深度学习的矩阵计算

切片slice

在NumPy中,切片(slicing)是一种选择数组元素子集的方法。切片操作基于索引,但允许你指定一个范围的索引,而不是单个索引。这对于处理多维数组(NumPy中的ndarray对象)特别有用。

一维数组切片

假设你有一个一维NumPy数组arr,你可以使用冒号:来指定切片的开始和结束索引(切片是左闭右开的,即包括开始索引但不包括结束索引)。

python 复制代码
import numpy as np  
  
arr = np.array([1, 2, 3, 4, 5])  
print(arr[1:4])  # 输出: [2 3 4]

在这个例子中,arr[1:4]选择了从索引1开始到索引4(不包括索引4)的元素。

多维数组切片

对于多维数组,你可以在每个维度上分别指定切片。

python 复制代码
arr_2d = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])  
  
# 选择第二行的所有元素  
print(arr_2d[1, :])  # 输出: [4 5 6]  
  
# 选择所有行的前两列  
print(arr_2d[:, :2])  # 输出:  
# [[1 2]  
#  [4 5]  
#  [7 8]]  
  
# 选择第一行和第二行的前两列  
print(arr_2d[0:2, :2])  # 输出:  
# [[1 2]  
#  [4 5]]

使用省略号(...

在NumPy中,省略号(...)用于表示选择所有前面的维度,这在处理多维数组时非常有用,特别是当你想要对数组的一部分进行切片,但保留前面的维度不变时。

然而,需要注意的是,在NumPy中直接使用...进行切片的情况相对较少,因为它主要用于函数和方法的参数中,以指示"所有前面的维度"。但在某些情况下,你可以结合使用索引和省略号来实现特定的切片操作。不过,对于简单的切片任务,直接使用索引和冒号:就足够了。

示例:省略号的使用

假设你有一个三维数组,并想要选择所有第一维和第二维的元素,但只选择第三维的特定切片。

python 复制代码
import torch

a = torch.Tensor([[
    [1, 2, 3, 4, 67],
    [4, 5, 6, 7, 45],
    [7, 8, 9, 10, 56]
], [
    [11, 2, 3, 4, 47],
    [41, 5, 6, 7, 46],
    [71, 8, 9, 10, 36]
]])
print(a.shape)  # torch.Size([2, 3, 5])
c = a[..., 4]
print(c, c.shape)
# tensor([[67., 45., 56.],
#         [47., 46., 36.]]) torch.Size([2, 3])
d = a[1, ...]
print(d, d.shape)
# tensor([[11.,  2.,  3.,  4., 47.],
#         [41.,  5.,  6.,  7., 46.],
#         [71.,  8.,  9., 10., 36.]]) torch.Size([3, 5])

c = a[..., 4] 表示保留前面所有维度,最后一个维度取第5个元素

d = a[1, ...] 表示第一个维度取第二个元素,保留后面的所有维度

双索引(高级索引)

在 NumPy 中,使用双索引(或称为高级索引)probs[[0,1],[0,2]] 的方式会从二维数组 probs 中选择特定的元素。具体来说,这种索引方式会按照第一个索引列表 [0,1] 中的索引来选择行,同时按照第二个索引列表 [0,2] 中的索引来选择列。

假设 probs 是如下定义的二维数组:

python 复制代码
import numpy as np  
  
probs = np.array([[0.6590012, 0.242433, 0.0985659],  
                  [0.32278368, 0.14503606, 0.5321803]])

那么,probs[[0,1],[0,2]] 的结果将会是:

  • 从第一行(索引为 0)选择第一列(索引为 0)的元素,即 0.6590012
  • 从第二行(索引为 1)选择第三列(索引为 2)的元素,即 0.5321803

因此,probs[[0,1],[0,2]] 的输出是:

0.6590012 0.5321803

这是一个一维数组,包含了按照指定索引从 probs 中选择的两个元素。

相关推荐
华玥作者12 小时前
[特殊字符] VitePress 对接 Algolia AI 问答(DocSearch + AI Search)完整实战(下)
前端·人工智能·ai
AAD5558889912 小时前
YOLO11-EfficientRepBiPAN载重汽车轮胎热成像检测与分类_3
人工智能·分类·数据挖掘
王建文go12 小时前
RAG(宠物健康AI)
人工智能·宠物·rag
巫婆理发22212 小时前
循环序列模型
深度学习·神经网络
ALINX技术博客12 小时前
【202601芯动态】全球 FPGA 异构热潮,ALINX 高性能异构新品预告
人工智能·fpga开发·gpu算力·fpga
易营宝12 小时前
多语言网站建设避坑指南:既要“数据同步”,又能“按市场个性化”,别踩这 5 个坑
大数据·人工智能
春日见12 小时前
vscode代码无法跳转
大数据·人工智能·深度学习·elasticsearch·搜索引擎
Drgfd13 小时前
真智能 vs 伪智能:天选 WE H7 Lite 用 AI 人脸识别 + 呼吸灯带,重新定义智能化充电桩
人工智能·智能充电桩·家用充电桩·充电桩推荐
萤丰信息13 小时前
AI 筑基・生态共荣:智慧园区的价值重构与未来新途
大数据·运维·人工智能·科技·智慧城市·智慧园区
盖雅工场13 小时前
排班+成本双管控,餐饮零售精细化运营破局
人工智能·零售餐饮·ai智能排班