深度学习的矩阵计算

切片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 = a1, ... 表示第一个维度取第二个元素,保留后面的所有维度

双索引(高级索引)

在 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 中选择的两个元素。

相关推荐
GitCode官方12 分钟前
从大语言模型到具身智能:百度百舸 LoongForge 入驻 AtomGit
人工智能·react native·百度·harmonyos·atomgit
Easy_API7 小时前
2.8万亿参数,编程反超GPT-6 Astra:Kimi K3.1 Pro把开源模型推到了哪一步
大数据·人工智能·gpt·深度学习
GlobalInfo7 小时前
2026年机器人多指灵巧手市场分析报告——涵盖行业调查、趋势分析与发展前景
大数据·人工智能·microsoft·微服务·机器人
紧跟先前的步伐8 小时前
Go AI Agent 实战 24|工具系统工程化收尾与阶段验收
人工智能·ai·golang·1024程序员节
释厄6238 小时前
AI学习层更新与跨体转移律——人类社会同构·不缺理解缺 U
人工智能·学习
老金带你玩AI9 小时前
集万家所长,一键复制的Agent.md!
人工智能
ZhuoAIStage9 小时前
舞台工艺多专业审图提速:用 AI 智能体编排 A+B+C+G 四段读图流水线
人工智能·自动化·工作流编排·舞台工艺·审图智能体
小奶包他干奶奶9 小时前
AI学习——1、机器学习概念
人工智能·机器学习
展讯快报10 小时前
悬浮提词器免费App评估报告:说得AI的免费策略与可用性分析
人工智能
Yuzhiyuxia10 小时前
【AI Agent面试系列】AI Agent记忆机制知识点1
人工智能·面试·职场和发展