pytorch: Tensor 常用操作

pytorch: Tensor 常用操作

torch.tensor是一个包含多个同类数据类型数据的多维矩阵。


常用参数

dtype: tessor的数据类型,总共有八种数据类型。其中默认的类型是torch.FloatTensor,而且这种类型的别名也可以写作torch.Tensor

Data typedtypeCPU tensorGPU tensor
32-bit floating pointtorch.float32 or torch.floattorch.FloatTensortorch.cuda.FloatTensor
64-bit floating pointtorch.float64 or torch.doubletorch.DoubleTensortorch.cuda.DoubleTensor
16-bit floating pointtorch.float16 or torch.halftorch.HalfTensortorch.cuda.HalfTensor
8-bit integer (unsigned)torch.uint8torch.ByteTensortorch.cuda.ByteTensor
8-bit integer (signed)torch.int8torch.CharTensortorch.cuda.CharTensor
16-bit integer (signed)torch.int16 or torch.shorttorch.ShortTensortorch.cuda.ShortTensor
32-bit integer (signed)torch.int32 or torch.inttorch.IntTensortorch.cuda.IntTensor
64-bit integer (signed)torch.int64 or torch.longtorch.LongTensortorch.cuda.LongTensor

device:这个参数表示了tensor将会在哪个设备上分配内存。它包含了设备的类型(cpucuda)和可选设备序号。如果这个值是缺省的,那么默认为当前的活动设备类型。

require_grad:这个标志表明这个tensor的操作是否会被pytorch的自动微分系统(Autograd)记录其操作过程,以便后续自动求导。

layout:表示了tensor的内存分布方式。目前,pytorch支持torch.strided方式以及实验性质地支持torch.sparse_coo。前者是目前普遍的使用方式。每一个strided tensor都关联一个torch.storage以保存其数据。


创建

典型的tensor构建方法:
torch.tensor(data, dtype=None, device=None, requires_grad=False)

从其他形式转换而来:
torch.as_tensor(data, dtype=None, device=None)
torch.from_numpy(ndarray

创建特殊值组成的tensor:
torch.zeros(*sizes, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False)
torch.zeros_like(input, dtype=None, layout=None, device=None, requires_grad=False)
torch.ones(*sizes, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False)
torch.ones_like(input, dtype=None, layout=None, device=None, requires_grad=False)
torch.eye(n, m=None, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False)
torch.empty(*sizes, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False)
torch.empty_like(input, dtype=None, layout=None, device=None, requires_grad=False)
torch.full(size, fill_value, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False)
torch.full_like(input, fill_value, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False)

按照步长或者区间创建tensor:
torch.arange(start=0, end, step=1, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False)
torch.range(start=0, end, step=1, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False)
torch.linspace(start, end, steps=100, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False)
torch.logspace(start, end, steps=100, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False)


索引,分块,组合,变形

组合

torch.cat(seq, dim=0, out=None):按照已经存在的维度进行concatenate。
torch.stack(seq, dim=0, out=None):按照新的维度进行concatenate。

分块

torch.chunk(tensor, chunks, dim=0):按照某个维度平均分块(最后一个可能小于平均值)
torch.split(tensor, split_size_or_sections, dim=0):按照某个维度依照第二个参数给出的list或者int进行分割tensor。

索引

torch.gather(input, dim, index, out=None):在指定维度上按照索引赋值输出tensor。输入与输出大小一致。
torch.index_select(input, dim, index, out=None):选出一维度的一些slice组合成新的tensor。指定维度的大小与index大小一致。
torch.masked_select(input, mask, out=None):按照mask输出一个一维的tensor。
torch.take(input, indices):将输入看成1D tensor,按照索引得到输出。输出大小与index大小一致。
torch.nonzero(input, out=None):输出非0 元素的坐标。
torch.where(condition, x, y):按照条件从x和y中选出满足条件的元素组成新的tensor。

变形

torch.reshape(input, shape)
torch.t(input): 只针对2D tensor转置
torch.transpose(input, dim0, dim1):交换两个维度

torch.squeeze(input, dim=None, out=None):去除那些维度大小为1的维度
torch.unbind(tensor, dim=0):去除某个维度
torch.unsqueeze(input, dim, out=None):在指定位置添加维度。


数学运算

Pointwise Ops

torch.addcdiv(tensor, value=1, tensor1, tensor2, out=None)

outi=tensori+value×tensor1itensor2i o u t i = t e n s o r i + v a l u e × t e n s o r 1 i t e n s o r 2 i

torch.addcmul(tensor, value=1, tensor1, tensor2, out=None)

outi=tensori+value×tensor1i×tensor2i o u t i = t e n s o r i + v a l u e × t e n s o r 1 i × t e n s o r 2 i

torch.ceil(input, out=None)

outi=inputi=inputi+1 out i = ⌈ input i ⌉ = ⌊ input i ⌋ + 1

torch.clamp(input, min, max, out=None)max 或者min 可以用 * 代替,表示没有该项限制

yi=minximaxif xi<minif minximaxif xi>max y i = { min if  x i < min x i if  min ≤ x i ≤ max max if  x i > max

torch.erf(tensor, out=None)

erf(x)=2πx0et2dt e r f ( x ) = 2 π ∫ 0 x e − t 2 d t

torch.fmod(input, divisor, out=None): 计算余数

torch.frac(tensor, out=None)

outi=inputiinputi out i = input i − ⌊ input i ⌋

torch.lerp(start, end, weight, out=None)

outi=starti+weight×(endistarti) o u t i = s t a r t i + w e i g h t × ( e n d i − s t a r t i )

torch.neg(input, out=None)

out=1×input o u t = − 1 × i n p u t

torch.pow(base, input, out=None)

outi=baseinputi o u t i = b a s e i n p u t i

torch.reciprocal(input, out=None)

outi=1inputi out i = 1 input i

torch.remainder(input, divisor, out=None):计算余数

<script type="math/tex; mode=display" id="MathJax-Element-11"></script>

torch.rsqrt(input, out=None)

outi=1inputi out i = 1 input i

torch.sign(input, out=None) :取符号

torch.trunc(input, out=None):截取整数部分

Reduction Ops

torch.dist(input, other, p=2)
计算p范数

torch.norm()
计算2范数

torch.prod()
计算所有元素的积

torch.unique(input, sorted=False, return_inverse=False)
以1D向量保存张量中不同的元素。

Comparison Ops

torch.isfinite(tensor) / torch.isinf(tensor) / torch.isnan(tensor)
返回一个标记元素是否为 finite/inf/nan 的mask 张量。

torch.kthvalue(input, k, dim=None, keepdim=False, out=None) -> (Tensor, LongTensor)
返回最小的第k个元素,如果为指定维度,则默认为最后一个维度。

torch.sort(input, dim=None, descending=False, out=None)
沿着某一维度对张量进行升序排列。

torch.topk(input, k, dim=None, largest=True, sorted=True, out=None)
返回最大的k个元素。

Other Operations

torch.bincount(self, weights=None, minlength=0)
返回每个值得频数。

torch.cross(input, other, dim=-1, out=None)
按照维度计算叉积。

torch.diag(input, diagonal=0, out=None)
如果输入时1D,则返回一个相应的对角矩阵;如果输入时2D,则返回相应对角线的元素。

torch.flip(input, dims)
按照给定维度翻转张量

torch.histc(input, bins=100, min=0, max=0, out=None)
计算张量的直方图。

torch.meshgrid(seq)
生成网格(可以生成坐标)。

BLAS and LAPACK Operations

Reference

[1] torch
[2] PyTorch for former Torch users

  • 56
    点赞
  • 372
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值