在火炬中转置列向量

时间:2016-02-07 23:04:54

标签: torch

我有一个colum向量,我想将其转换为行向量,在执行此操作时出现以下错误。有没有办法在火炬中转换1维向量

th> bb
 1
 2
[torch.DoubleTensor of size 2]

                                                                      [0.0005s]
th> bb:t()
[string "_RESULT={bb:t()}"]:1: calling 't' on bad self (Tensor must have 2 dimensions at /tmp/luarocks_torch-scm-1-5379/torch7/generic/Tensor.c:590)
stack traceback:
    [C]: in function 't'
    [string "_RESULT={bb:t()}"]:1: in main chunk
    [C]: in function 'xpcall'

2 个答案:

答案 0 :(得分:2)

这是因为张量的维度为1.您只能采用尺寸为2的张量转置。

为了做到这一点,首先将张量调整为

bb:resize(2,1)

之后,它应该有效:

th> bb:t()
 1  2

更一般地说,对于任何其他尺寸的张量,您只需使用:

bb:resize(bb:size(1),1)

答案 1 :(得分:0)

对于一维张量转置,您可以执行以下操作:

假设您有一维张量b:

public class Role
{
    public int RoleId{ get; set; }
    public string Role{ get; set; }
} 

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    base.OnModelCreating(modelBuilder);

    modelBuilder.Entity<Role>().ToTable("MyCustomRoleTable");   

    foreach (Type entityType in GetEntityTypes())
    {
        modelBuilder.RegisterEntityType(entityType);
    }

    modelBuilder.Configurations.AddFromAssembly(GetType().Assembly);
}

和.t()不适用于一维

import torch

a = torch.rand(1,10)
b = a[0,:]

您可以使用以下选项之一:

print(b)
#print(b.t()) # not going to work 1D

第一行创建1 * N矩阵,然后对其进行转置,第二行创建转置的N * 1矩阵