在日常工作中遇到了很多好用的pytorch矩阵操作,记录一下避免忘记,防止日后工作中重复造轮子。
本帖将不断更新
output = torch.stack(tensors: Union[Tuple[Tensor, ...], List[Tensor]], dim: _int=0)
将多个tensor在某一维度拼接,会增加一个维度。
torch.split(tensor, split_size_or_sections, dim=0)
split_size_or_sections: 分割出tensor在对应维度的尺寸
torch.chunk(input, chunks, dim=0) → List of Tensors
chunks: 想分割出的tensor数目
x1 ,y1 = torch.meshgrid(x,y)
生成网格,可以用于生成坐标。函数输入两个数据类型相同的一维张量,两个输出张量的行数为第一个输入张量的元素个数,列数为第二个输入张量的元素个数,当两个输入张量数据类型不同或维度不是一维时会报错。
x1
是x
复制结果,y1
是y
的复制结果。
例如x=[1,2], y=[3,4],则x1=[[1,2], [1,2]], y1=[[3,3], [4,4]]。
output = torch.clamp(input, min, max, out=None)
将输入数据压缩在min~max
范围内,即
y i = { m i n , x i < m i n x i , m i n ≤ x i ≤ m a x m a x , x i > m a x y_i=\left\{ \begin{aligned} min, & & x_i
torch.transpose(input, dim0, dim1, out=None) → Tensor
矩阵两个维度转换
x = x.transpose(0, 1)
等价于x.transpose_(0, 1)
transpose
不改变原数据,因此transpose
后tensor
会变成不连续的,transpose + view
会报错
注:这里的连续是指tensor按行连续储存
torch.contiguous()
将不连续的tensor
转化为连续的tensor
。
transpose + view
会报错,transpose+contiguous+view
合法。
返回一个和源张量同shape、dtype和device的张量,与源张量不共享数据内存,但提供梯度的回溯。
返回一个和源张量同shape、dtype和device的张量,并且与源张量共享数据内存,但不提供梯度的回溯。
只做简单的数据复制,既不数据共享,也不梯度共享,两个张量无关联。
将函数参数中的数据data
赋值给新的张量,提供了更细致的属性控制
**kwards=None
时tensor
负责提供张量属性
否则优先从**kwards
获得张亮属性,tensor
提供属性补充
会将b复制给a,同时改变a的requires_grad属性,但不改变device属性。
pytorch中,一般来说如果对tensor的一个函数后加上了下划线,则表明这是一个in-place类型。in-place类型是指,当在一个tensor上操作了之后,是直接修改了这个tensor,而不是返回一个新的tensor并保留旧的tensor。
对tensor的一个函数后加上下划线,功能与原函数相同。
例如clamp_