在搬运别人代码时遇到了两个没见过的索引方式,自己试验之后,大概搞懂了
1、[m::n]
a = [1,2,3,4,5,6,7,8]
>>>b=a[3::1]
>[4,5,6,7,8]
>>>b=a[3::2]
>[4,6,8]
这里我们就可以推断出,这是省略索引终值的一种列表索引方式,m为起点,n为步长,省略的终值就默认为列表末尾。
2、[…,j]
这种用法是在JitterBoxes的代码中第一次见到的,结合代码中的注释和个人测试
import torch
j = torch.rand(2,4,3)
>>> j
tensor([[[0.3887, 0.2432, 0.9022],
[0.2856, 0.0068, 0.0999],
[0.4403, 0.9478, 0.3475],
[0.6689, 0.4678, 0.4336]],
[[0.8936, 0.4579, 0.7158],
[0.4619, 0.4099, 0.6898],
[0.8577, 0.7383, 0.8655],
[0.3997, 0.4814, 0.2157]]])
>>> j[...,0]
tensor([[0.3887, 0.2856, 0.4403, 0.6689],
[0.8936, 0.4619, 0.8577, 0.3997]])
>>> j[...,3]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: index 3 is out of bounds for dimension 1 with size 3`
>>> j[...,2]
tensor([[0.9022, 0.0999, 0.3475, 0.4336],
[0.7158, 0.6898, 0.8655, 0.2157]])
到这里我们就可以总结出规律了,…的作用就是把tensor高维度的索引省略了,直接按最后一个维度进行索引。