张量的操作

张量的拼接(numpy.concatenate)

np.concatenate((a1,a2,a3,…), axis=0)
张量的拼接要用np.concatenate这个方法的,其中 a1,a2,a3,…是拼接的子张量,axis是维数,axis=0表示按照第一维进行拼接。
例如将两个二维的张量按照第一维拼接成一个二维的张量:

import numpy as np
a=np.array([[1,2,3]])
b=np.array([[4,5,6]])
c=np.concatenate((a,b),axis=0)
print(c)
d=np.concatenate((c,a),axis=0)
print(d)
e=np.concatenate((c,c),axis=1)
print(e)

结果

array([[1, 2, 3],
       [4, 5, 6]])
array([[1, 2, 3],
       [4, 5, 6],
       [1, 2, 3]])
array([[1, 2, 3, 1, 2, 3],
       [4, 5, 6, 4, 5, 6]])

张量的拼接(torch.cat)

这里的拼接和上面介绍的numpy的拼接功能是一样的

C = torch.cat( (A,B),0 )  #按维数0拼接(竖着拼)
C = torch.cat( (A,B),1 )  #按维数1拼接(横着拼)

例:

import torch
A=torch.ones(2,3)  #2x3的张量(矩阵)   
B=2*torch.ones(4,3)  #4x3的张量(矩阵)    
C=torch.cat((A,B),0)  #按维数0(行)拼接
print(C)                                

结果:

tensor([[ 2.,  2.,  2.],
        [ 2.,  2.,  2.],
        [ 2.,  2.,  2.],
        [ 2.,  2.,  2.]])

接着上面

D=2*torch.ones(2,4) #2x4的张量(矩阵)
C=torch.cat((A,D),1)#按维数1(列)拼接
print(C)

结果:

tensor([[ 1.,  1.,  1.,  2.,  2.,  2.,  2.],
        [ 1.,  1.,  1.,  2.,  2.,  2.,  2.]])

张量的重构(torch.view)

在pytorch中view函数的作用为重构张量的维度,相当于numpy中resize()的功能,但是用法可能不太一样。
1.torch.view(参数a,参数b,…)
例如:

import torch
tt1=torch.tensor([-0.3623, -0.6115,  0.7283,  0.4699,  2.3261,  0.1599])
result=tt1.view(3,2)
print(result)

结果

tensor([[-0.3623, -0.6115],
        [ 0.7283,  0.4699],
        [ 2.3261,  0.1599]])

在上面例子中参数a=3和参数b=2决定了将一维的tt1重构成3x2维的张量。

2.有的时候会出现torch.view(-1)或者torch.view(参数a,-1)这种情况。
例:

import torch
tt2=torch.tensor([[-0.3623, -0.6115],
         [ 0.7283,  0.4699],
         [ 2.3261,  0.1599]])
result=tt2.view(-1)
print(result)

结果:

tensor([-0.3623, -0.6115,  0.7283,  0.4699,  2.3261,  0.1599])

由上面的案例可以看到,如果是torch.view(-1),则原张量会变成一维的结构。

例:

import torch
tt3=torch.tensor([[-0.3623, -0.6115],
         [ 0.7283,  0.4699],
         [ 2.3261,  0.1599]])
>>> result=tt3.view(2,-1)

结果:

tensor([[-0.3623, -0.6115,  0.7283],
        [ 0.4699,  2.3261,  0.1599]])

由上面的案例可以看到,如果是torch.view(参数a,-1),则表示在参数b未知,参数a已知的情况下自动补齐列向量长度,在这个例子中a=2,tt3总共由6个元素,则b=6/2=3。

例:

import torch
inputs = torch.randn(1,3)
print(inputs)
print(inputs.view(1, 1, -1))

结果:

tensor([[-0.5525,  0.6355, -0.3968]])
tensor([[[-0.5525,  0.6355, -0.3968]]])

将二维变为三维,a=1,b=1,c=3/(1*1)

张量的形状(torch.size)

import torch
inputs = torch.randn(1,3)
print(inputs.size())

结果:

torch.Size([1, 3])
发布了41 篇原创文章 · 获赞 13 · 访问量 6692

猜你喜欢

转载自blog.csdn.net/comli_cn/article/details/104797320