python - a[:,:,0] 和 a[:][:][0] 之间的差异
问题描述
嗨,我正在研究 python 中的切片,我发现了一些奇怪的东西,我不明白
import torch
a = torch.tensor([
[
[1, 2, 3],
[4, 5, 6]
],
[
[7, 2, 3],
[8, 5, 6]
]
])
>>> a[:][:][0]
tensor([[1, 2, 3],
[4, 5, 6]])
>>> a[:,:,0]
tensor([[1, 4],
[7, 8]])
我试图从对应的火炬列表中拉出[[1,4,7,8]],所以我输入了一个[:][:][0],结果是[[1,2,3], [4,5,6]]。
然后,当我输入 a[:,:,0] 时,出现了 [[1,4,7,8]]。
我以为他们没有什么不同,但出现了不同的结果。
torch 和 numpy 运算符,有一个类似 a[:,0] 的操作。它与 a[:][0] 究竟有何不同?
解决方案
您可以看到第一个 ,a[:][:][0]
是几个对 的链式调用__getitem__
。这意味着a[:][:][0]
大致相当于:
b = a[:]
c = b[:]
d = c[0]
结果在哪里d
。a[0]
在您的情况下,它返回与, 因为相同的东西a[:] == a
。
相反,a[:,:,0]
只会用参数调用__getitem__
一次slice(None), slice(None), 0
。
在您的情况下,这是第三轴上张量的第一片。
推荐阅读
- apache-kafka - 如何流式传输到全局 Kafka 表
- python - 如何计算每小时的平均计数?
- python - 无法访问网络位置 - Python 安装程序
- bash - 收到错误 EOF:使用 ssh 时找不到命令
- javascript - 传到 store 后如何在 redux 中调用 reducer?
- types - 如何键入注释宏的返回值?
- c# - C#:只有在运行时才知道数据库名称和列名称时,将数据库映射到类属性
- wiremock - Wiremock - 如何将响应模板应用于标头名称?
- api - 在 Laravel 5.6 中找不到模型
- oracle - 使用 TOAD 调试器调试 Oracle 存储过程时输入参数使用什么