前言
ndarray与tensor的切片的异同
一、ndarray的切片
ndarray的切片形式:a[start:stop:step]
当step小于0时,将最后一个元素(即-1元素)视为第0个元素,从后往前取值
当从前往后取时,start=0可省略,stop=end必须省略,例如a[::1]
当从后往前取时,start=-1可省略,stop=begin必须省略,例如a[::-1]
当step=1时可省略,例如a[1:3]、a[::]
二、tensor的切片
tensor的切片形式与ndarray类似,不同的是step要大于0
三、代码
a = np.arange(4) # array([0, 1, 2, 3])
print(a[::2]) # a[0:end:2]
print(a[1:])
print(a[1::]) # a[1:end:1]
print(a[1:-1]) # a[1:-1:1]
print()
print(a[::-1]) # a[-1:begin:-1]
print(a[:0:-1]) # a[-1:0:-1]
print(a[-2::-2]) # a[-2:begin:-2]
print()
t = torch.tensor(a)
print(t[::])
print(t[::2])
print(t[::-1])
运行结果:
[0 2]
[1 2 3]
[1 2 3]
[1 2]
[3 2 1 0]
[3 2 1]
[2 0]
tensor([0, 1, 2, 3])
tensor([0, 2])
ValueError Traceback (most recent call last)
Cell In[55], line 18
16 print(t[::])
17 print(t[::2])
---> 18 print(t[::-1])
ValueError: step must be greater than zero
总结
slice形式:a[start:stop:step]
注意step小于0时是从后往前取值,将最后一个元素当作0元素
tensor的step要大于0