Torch/Lua, как выбрать подмножество массива или тензора?

Я работаю над Torch/Lua и имею массив dataset из 10 элементов.

dataset = {11,12,13,14,15,16,17,18,19,20}

Если я напишу dataset[1], я смогу прочитать структуру 1-го элемента массива.

th> dataset[1]
11  

Мне нужно выбрать только 3 элемента из всех 10, но я не знаю, какую команду использовать. Если бы я работал на Matlab, я бы написал: dataset[1:3], а здесь не работает.

У Вас есть какие-то предложения?


person DavideChicco.it    schedule 08.07.2015    source источник


Ответы (1)


В факеле

th> x = torch.Tensor{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}

Чтобы выбрать диапазон, как первые три, используйте оператор индекса:

th> x[{{1,3}}]
1
2
3

Где 1 — это «начальный» индекс, а 3 — «конечный» индекс.

Дополнительные сведения см. в разделе Извлечение субтензоров. альтернативы с использованием Tensor.sub и Tensor.narrow


В Lua 5.2 или ниже

Таблицы Lua, такие как ваша переменная dataset, не имеют метода выбора поддиапазонов.

function subrange(t, first, last)
  local sub = {}
  for i=first,last do
    sub[#sub + 1] = t[i]
  end
  return sub
end

dataset = {11,12,13,14,15,16,17,18,19,20}

sub = subrange(dataset, 1, 3)
print(unpack(sub))

который печатает

11    12   13

В Луа 5.3

В Lua 5.3 вы можете использовать table.move.

function subrange(t, first, last)
     return table.move(t, first, last, 1, {})
end
person ryanpattison    schedule 08.07.2015
comment
Спасибо @rpattiso. Но как это сделать с простой таблицей? - person DavideChicco.it; 09.07.2015
comment
@DavideChicco.it см. обновление для создания новой таблицы. Итераторы или метатаблицы Lua можно использовать, если вы хотите избежать копирования значений. Если вы используете факел, тензоры более удобны и эффективны. - person ryanpattison; 09.07.2015