Tensor
类可能是Torch
中最重要的类,几乎所有的模块都依赖它。和Torch7
中的其他类类似,这个类也可以进行序列化。
多维矩阵
一个Tensor
是一个多维矩阵,通过借助使用LongStorage
可以创建无限维度的矩阵。
例如
|
|
x:nDimension()
可以获得维度数目 x:size()
可以获得各维度的大小
如果我们有一个三维矩阵x = Tensor(7,7,7)
,那么可以通过x[2][3][4]
来获得(2,3,4)位置上的元素
Tensor
中的数字是行向量连续的
数据类型
|
|
高效内存管理
Tensor
的所有操作都不会进行数据拷贝,如果需要进行拷贝时,通过
|
|
构造Tensor
默认条件下,申请的内存不会被初始化,构造新Tensor
的方法有一下几种:
torch.Tensor()
返回空的tensortroch.Tensor(tensor)
返回引用 tensor,没有内存拷贝1234567891011121314151617x = torch.Tensor(2,5):fill(3.14)> x3.1400 3.1400 3.1400 3.1400 3.14003.1400 3.1400 3.1400 3.1400 3.1400[torch.DoubleTensor of dimension 2x5]y = torch.Tensor(x)> y3.1400 3.1400 3.1400 3.1400 3.14003.1400 3.1400 3.1400 3.1400 3.1400[torch.DoubleTensor of dimension 2x5]y:zero()> x -- elements of x are the same as y!0 0 0 0 00 0 0 0 0[torch.DoubleTensor of dimension 2x5]torch.Tensor(sz1,[,sz2[,sz3[,sz4]]])
torch.Tensor(table)
1234> torch.Tensor({{1,2,3,4}, {5,6,7,8}})1 2 3 45 6 7 8[torch.DoubleTensor of dimension 2x4]
函数接口
|
|
resize
按照行向量连续分布,如果resize后的大小大于原来的矩阵,则剩余的填充0,如果小于原来的矩阵,则截取连续数据中的前面的合适的长度来形成新的矩阵,注意,此处也是默认引用,会同时改变原来的数据分布。
切片
narrow(dim,index,size)
|
|
sub(dim1s, dim1e … [, dim4s [, dim4e]])
select(dim, index)
使用
[{},{}]
来进行切片1234567891011121314151617181920212223242526272829303132333435x = torch.Tensor(5, 6):zero()> x0 0 0 0 0 00 0 0 0 0 00 0 0 0 0 00 0 0 0 0 00 0 0 0 0 0[torch.DoubleTensor of dimension 5x6]x[{ 1,3 }] = 1 -- sets element at (i=1,j=3) to 1> x0 0 1 0 0 00 0 0 0 0 00 0 0 0 0 00 0 0 0 0 00 0 0 0 0 0[torch.DoubleTensor of dimension 5x6]x[{ 2,{2,4} }] = 2 -- sets a slice of 3 elements to 2> x0 0 1 0 0 00 2 2 2 0 00 0 0 0 0 00 0 0 0 0 00 0 0 0 0 0[torch.DoubleTensor of dimension 5x6]x[{ {},4 }] = -1 -- sets the full 4th column to -1> x0 0 1 -1 0 00 2 2 -1 0 00 0 0 -1 0 00 0 0 -1 0 00 0 0 -1 0 0[torch.DoubleTensor of dimension 5x6]
mask
maskedSelect(mask) maskedCopy(mask) maskedFill(mask,val)
Expanding/Replicating/Squeezing Tensors
[result]expand([result],size)
这种方式不会创建新的
tensor
,而只是改变了对原有数据的查看方法,所以对新数据的操作会影响原来的数据[Tensor]repeatTensor([result],sizes)
这种方式会创建新的数据,
sizes
用来指定 每个维度的重复次数
tensor view
下面的方法会返回一个tensor,这个tensor是原来数据的另外一个查看方法。
[result] view([result,]tensor,sizes)
[result] viewAs([result,],tensor,template)
[Tensor] transpose(dim1,dim2)
交换两个维度,2D中可以使用t()进行转制。[Tensor] permute(dim1,dim2,...,dimn)
全部自定义的维度转换[Tensor] unfold(dim,size,step)