Torch7 Tensor Non-Contiguos Index (аналогично Numpy)

Я новичок в torch7 и не могу найти способ получить несмежные индексы тензора на основе другого тензора. В numpy я делаю следующее:

array = np.zeros(5) # array = [0 0 0 0 0]
indices = np.array([0, 2, 4])
array[indices] = np.array([1, 2, 3]) # array = [1 0 2 0 3]

Есть ли способ сделать что-то подобное в torch7? Что-то типа:

array = torch.zeros(5) -- array = [0 0 0 0 0]
indices = torch.Tensor({1, 3, 5})
array[indices] = torch.Tensor({1, 2, 3}) -- array = [1 0 2 0 3]

Спасибо!


person crscardellino    schedule 29.11.2015    source источник


Ответы (3)


Хорошо, посмотрев вокруг, я не смог найти точного решения, но я нашел приблизительное то, что я хотел сделать, я делюсь им, если кто-то еще сочтет это полезным:

array = torch.zeros(5) -- array = [0 0 0 0 0]
indices = torch.LongTensor({1, 3, 5}) -- Is important that this is a LongTensor
array:indexAdd(1, indices, torch.Tensor({1, 2, 3})) -- array = [1 0 2 0 3]
person crscardellino    schedule 29.11.2015

torch.IndexCopy делает именно то, что вы необходимость:

array:indexCopy(1, indices, torch.Tensor({1, 2, 3}))
person Alexander Lutsenko    schedule 08.12.2015

Если вы являетесь пользователем Python, возможно, вы также можете попробовать https://github.com/imodpasteur/lutorpy. . Например, вы можете обработать свой массив в python, а затем преобразовать его в тензор факела. Если вы хотите преобразовать обратно в массив numpy, преобразование будет мгновенным, потому что оно передает только указатель, а два объекта в python и lua используют одну и ту же память.

array = np.zeros(5) # array = [0 0 0 0 0]
indices = np.array([0, 2, 4])
array[indices] = np.array([1, 2, 3]) # array = [1 0 2 0 3]

require("torch")
# convert numpy array to torch tensor
tensor = torch.fromNumpyArray(array) 

# put your torch code here

#convert back to numpy array
array = tensor.asNumpyArray()
# now array is sharing memory with tensor 
person Wei    schedule 27.04.2016