【问题标题】:Create a 2D list with variable length [torch]创建一个可变长度的二维列表 [火炬]
【发布时间】:2016-12-14 16:48:43
【问题描述】:

我想创建一个内部可以包含可变长度元素的二维列表,例如,如果我在 MATLAB 中有一个 10x10 的列表,我可以 定义它:

z = cell(10,10)

然后开始分配一些元素:

z{2}{3} = ones(3,1)
z{1}{1} = zeros(100,1)
z{1}{2} = []
z{1}{3} = randn(20,1)
...

在 Torch 中定义这样的空 2D 列表的最佳方法是什么?此外,有没有办法利用张量结构来做到这一点?

在 python 中,我可以做一些事情来定义一个空的 10x10 2D 列表:

z = [[None for j in range(10)] for i in range(10)]

我对 Torch 的最佳猜测是做类似的事情

z = torch.Tensor(10,10)

for i=1,10 do
  for j=1,10 do
    z[{{i},{j}}] = torch.Tensor()
  end
end

但是,这不起作用,在张量中定义张量似乎是个坏主意......

这是对此处提出的问题的后续处理(但在链接中是在 python 中提出的):Create 2D lists in python with variable length indexed vectors

【问题讨论】:

    标签: arrays lua torch


    【解决方案1】:

    根据我阅读的文档,张量仅支持原始数字数据类型。您将无法将张量用于您的预期用途。利用表格。

    local function makeMatrix(initialVal, ...)
        local isfunc = type(initialVal) == "function"
        local dimtable = {...}
        local function helper(depth)
            if depth == 0 then
                return isfunc and initialVal() or initialVal
            else
                local plane = {}
                for i = 1, dimtable[depth] do
                    plane[i] = helper(depth-1)
                end
                return plane
            end
        end
        return helper(#dimtable)
    end
    
    p = makeMatrix(0, 2, 3, 5) -- makes 3D matrix of size 2x3x5 with all elements initialized to 0
    
    makeMatrix(torch.Tensor, m ,n)
    

    【讨论】:

      【解决方案2】:

      来自 Torch 的 Google Group 论坛的回答。同意表格是解决方案:

      z = {}
      
      for i=1,10 do
      
        z[i] = {}
        for j=1,10 do
          z[i][j] = torch.Tensor()
        end
      end
      

      【讨论】:

        猜你喜欢
        • 2022-07-20
        • 2020-11-28
        • 1970-01-01
        • 2021-03-30
        • 2021-08-25
        • 2013-07-08
        • 1970-01-01
        • 1970-01-01
        • 2021-09-27
        相关资源
        最近更新 更多