深度学习的矩阵计算

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

相关推荐
不去幼儿园32 分钟前
【MARL】深入理解多智能体近端策略优化(MAPPO)算法与调参
人工智能·python·算法·机器学习·强化学习
想成为高手49938 分钟前
生成式AI在教育技术中的应用:变革与创新
人工智能·aigc
YSGZJJ1 小时前
股指期货的套保策略如何精准选择和规避风险?
人工智能·区块链
无脑敲代码,bug漫天飞2 小时前
COR 损失函数
人工智能·机器学习
HPC_fac130520678162 小时前
以科学计算为切入点:剖析英伟达服务器过热难题
服务器·人工智能·深度学习·机器学习·计算机视觉·数据挖掘·gpu算力
小陈phd5 小时前
OpenCV从入门到精通实战(九)——基于dlib的疲劳监测 ear计算
人工智能·opencv·计算机视觉
Guofu_Liao6 小时前
大语言模型---LoRA简介;LoRA的优势;LoRA训练步骤;总结
人工智能·语言模型·自然语言处理·矩阵·llama
ZHOU_WUYI10 小时前
3.langchain中的prompt模板 (few shot examples in chat models)
人工智能·langchain·prompt
如若12310 小时前
主要用于图像的颜色提取、替换以及区域修改
人工智能·opencv·计算机视觉
老艾的AI世界10 小时前
AI翻唱神器,一键用你喜欢的歌手翻唱他人的曲目(附下载链接)
人工智能·深度学习·神经网络·机器学习·ai·ai翻唱·ai唱歌·ai歌曲