如何在 torch 中创建一个具有可变长度的二维列表?

我想创建一个可以在其中包含长度可变元素的二维列表,例如在 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 中,定义这样的空二维列表的最佳方法是什么?此外,有没有一种方法可以利用张量结构来做到这一点?

在 python 中,我可以通过如下方法定义一个空的 10x10 二维列表:

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

点赞
用户6614127
用户6614127

从我所阅读的文档来看,张量(tensors)仅支持基本数字数据类型。你将无法将张量用于你的预期用途。利用表格(tables)。

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)
2016-08-08 21:07:01
用户1282043
用户1282043

从 Torch 的 Google 组论坛的回答中得知,表格是解决问题的方法:

z = {}

for i=1,10 do

  z[i] = {}
  for j=1,10 do
    z[i][j] = torch.Tensor()
  end
end
2016-08-26 18:59:00