创建一个可变长度的二维列表 [torch]

Create a 2D list with variable length [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)]

我对火炬的最佳猜测是做类似

的事情
z = torch.Tensor(10,10)

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

但是,这行不通,在张量中定义张量似乎不是个好主意...

这是对此处提出的问题的跟进(但是在 link 中,它在 python 中提出):

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

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)

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

z = {}

for i=1,10 do

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