2016-08-08 4 views
0

Я хочу, чтобы создать список 2D, которые могут иметь элементы различной длины внутри, например, если у меня есть список 10x10 в MATLAB, я могу определить его:Создание 2D список с переменной длиной [факел]

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) 
... 

Каков оптимальный способ определить такой пустой 2D список фонариком? Более того, есть ли способ использовать тензорную структуру для этого?

В Python, я могу сделать что-то вместе, чтобы это определить пустой список 10х10 2D:

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 

, но это не работает , и определение тензора внутри тензора кажется плохим идеей ...

Это вопрос, который задан здесь (однако в ссылке, заданной в python): Create 2D lists in python with variable length indexed vectors

ответ

0

Ответьте на вопросы от форумов группы Google Torch. Согласование этих таблиц является решением:

z = {} 

for i=1,10 do 

    z[i] = {} 
    for j=1,10 do 
    z[i][j] = torch.Tensor() 
    end 
end 
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) 
Смежные вопросы