抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

参考:

Python中的特殊索引方式

a = [1,2,3,4,5,6,7,8]为例

  1. [- n],倒着数第n个元素
  • [-1],最后一个元素
  • 同样的[-2]表示倒数第二个元素。
  1. [n : m],从第n项到第m-1项(前闭后开)
  • [:-1],从第一项到倒数第二项
  • [:5],从第1个到第5个(idx从0开始)元素。
  • [2:5],从第3项到第5项元素。
  1. [n : m : k],从第n项开始取,每隔k个取一项,截止到第m-1项(前闭后开),当k为正的时候起始索引应该小于结束索引;当k为负的时候起始索引应该大于结束索引,因为在倒序来看,首先是索引值大的被取到,然后才是索引值小的。
  • [::-1],全列表倒序
  • [4::-1],从第5项倒序取到第0项

逗号表示维度的分割线

  1. [n:m, j:k, g:h],第0维从n到m,第1维从j到k,第2维从g到h(均为前闭后开)
  • [:,:,0]: 前两个维度全选,最后一个维度只取0号索引。
  • […,-1]:…省略维度,表示前面所有维度
  • […,::-1]: 对最后一个维度进行逆序。
  • [:,::-1,:]:第二个维度逆序。

Tensor交换维度

transpose()

可以交换tensor的任意两个维度,但是该函数一次只有两个参数,即一次只能交换两个维度。

1
2
3
import torch
x = torch.randn(8, 6, 5, 4)
y = x.transpose(1,2) # 交换第二与第三维度

permute()

该函数可以随意交换任意维度,并且可以重新排列整合维度

1
2
3
import torch
x = torch.randn(8, 6, 5, 4)
y = x.permute(3,0,2,1)

Numpy交换维度

transpose()

1
2
import numpy as np
img = np.transpose(img, (1, 2, 0))

Numpy挤出维度

1
2
3
4
5
6
7
8
9
10
11
12
x = np.arange(8).reshape(2, 4)

# 添加第0维,输出shape -> (1, 2, 4)
x1 = x[np.newaxis, :]
x1 = x[np.newaxis, ...]
x1 = x[None, :]
x1 = x[None, ...]
print(x1.shape)

# 添加第1维, 输出shape -> (2, 1, 4)
x2 = np.expand_dims(x, axis=1)
print(x2.shape)

评论