PyTorch Tensor(二)


Tensor一般コマンド
1.アクションの作成
1.1 torch.eye
2次元テンソル、対角線位置全1、その他の位置全0、戻り値タイプTensorを返します.
torch.eye(n, m=None, out=None)

パラメータ:
  • n(int)-行数
  • m(int,optional)-列数.Noneの場合、デフォルトはn
  • です.
  • out (Tensor, optinal) - Output tensor
  • torch.eye(3)
    
    tensor([[1., 0., 0.],
            [0., 1., 0.],
            [0., 0., 1.]])
    

    1.2 torch.linspace
    torch.linspace(start, end, steps=100, out=None) → Tensor
    

    1次元テンソルを返し、区間startendに均等に間隔を置いたsteps点を含む.出力1次元テンソルの長さはstepsであった.注意stepsはステップ長ではありません.
    パラメータ:
  • start(float)-シーケンスの開始点
  • end(float)-シーケンスの最終値
  • steps(int)-startとendの間に生成されたサンプル数
  • out(Tensor,optional)-結果テンソル
  • torch.linspace(3, 12, steps=5)
    
    tensor([ 3.0000,  5.2500,  7.5000,  9.7500, 12.0000])
    

    1.3 torch.randとtorch.randn
    randは[0,1)均一分布,radnは標準正太分布である
    torch.rand(*sizes, out=None) → Tensor
    torch.randn(*sizes, out=None) → Tensor
    

    形状は可変パラメータsizeによって決定される
    x = torch.rand(2,2)
    x
    
    tensor([[0.9483, 0.6083],
            [0.0579, 0.0638]])
    
    y = torch.randn(3,3)
    y
    
    tensor([[ 0.3220, -2.4360, -0.0790],
            [-0.1366, -0.5444,  1.4342],
            [ 0.7295, -1.3341,  0.2022]])
    

    似たようなones、zerosの使い方は上と同じです.
    1.4 torch.arange()とtorch.range()
    torch.arange(start, end, step=1, out=None) → Tensor
    torch.range(start, end, step=1, out=None) → Tensor
    

    長さfloor((end−start)/step)の1次元テンソルを返します.startからendまでのstepをステップ長とするシーケンス値のセット(デフォルトステップ長は1)パラメータが含まれます.
  • start(float)-シーケンスの開始点
  • end(float)-シーケンスの最終値
  • step(int)-隣接点の間隔の大きさ【ステップ長】
  • out(Tensor,optional)-結果テンソルはtorch.arange()を推奨し、またpythonは左閉右開
  • にこだわっている.
    torch.arange(1,50,10)
    
    tensor([ 1, 11, 21, 31, 41])
    

    2.スライス、インデックス、接続、シフト
    2.1 torch.cat()
    torch.cat(inputs, dimension=0) → Tensor
    

    入力されたテンソルシーケンスseqを所定の次元で接続操作する.パラメータ:
  • inputs(sequence of Tensors)-任意の同じTensorタイプ(float,long,duoble)pythonシーケンス
  • dimension(int,optional)-この次元に沿ってテンソルシーケンス
  • を接続します.
    ##    
    x = torch.randn(1,3)
    x
    
    tensor([[-0.0675, -0.5289, -0.3090]])
    
    y = torch.cat((x,x,x),0)
    y
    
    tensor([[-0.0675, -0.5289, -0.3090],
            [-0.0675, -0.5289, -0.3090],
            [-0.0675, -0.5289, -0.3090]])
    
    z = torch.cat((x,x,x),1)
    z
    
    tensor([[-0.0675, -0.5289, -0.3090, -0.0675, -0.5289, -0.3090, -0.0675, -0.5289,
             -0.3090]])
    

    torch.chunk(),torch.gather(),torch.index_select(),torch.masked_select()公式ドキュメントを表示するには、次の手順に従います.https://pytorch-cn.readthedocs.io/zh/latest/package_references/torch/
    2.2 torch.squeeze
    torch.squeeze(input, dim=None, out=None)
    

    入力テンソルシェイプの1を除去して返します.入力が「A」の場合×1×B×1×C×1×D)では、出力形状は、(A)×B×C×D)
    dimが与えられると、押出操作は所定の次元にのみ行われる.例えば、入力形状は、(A)×1×B),squeeze(input, 0)はテンソルを一定に保ち,squeeze(input, 1)のみで形状が(A)になる×B).
    注:テンソルを返すと、入力テンソルとメモリが共有されるため、どちらかの内容を変更すると別の内容が変更されます.
    パラメータ:
  • input(Tensor)-入力テンソル
  • dim(int,optional)-与えられた場合、inputは、与えられた次元で
  • だけ押圧する.
  • out(Tensor,optional)-出力テンソル
  • #  
    x = torch.ones(2,1,2,1,2)
    x.size()
    
    torch.Size([2, 1, 2, 1, 2])
    
    y = torch.squeeze(x)
    y.size()
    
    torch.Size([2, 2, 2])
    
    y = torch.squeeze(x, 0)
    y.size()
    
    torch.Size([2, 1, 2, 1, 2])
    
    y = torch.squeeze(x, 1)
    y.size()
    
    torch.Size([2, 2, 1, 2])
    

    2.3 torch.unsqueeze()
    torch.unsqueeze(input, dim, out=None)
    

    新しいテンソルを返し、入力した指定の位置に次元1を挿入します.
    注:テンソルを返すと、入力テンソルとメモリが共有されるため、どちらかの内容を変更すると別の内容が変更されます.
    #  
    x = torch.Tensor([1,2,3]) #   tensor        
    y = torch.unsqueeze(x,0)
    z = torch.unsqueeze(x, 1)
    print(y)
    print(z)
    
    tensor([[1., 2., 3.]])
    tensor([[1.],
            [2.],
            [3.]])
    

    2.4 torch.tとtransposeで転置を実現
    z
    
    tensor([[1.],
            [2.],
            [3.]])
    
    torch.t(z)
    
    tensor([[1., 2., 3.]])
    

    参考:PyTorch中国語ドキュメント