Получение индекса последовательных минимальных сравнений - PullRequest
0 голосов
/ 08 марта 2020

Скажите, если у меня есть тензор

values = torch.tensor([5., 4., 8., 3.])

, и я хочу взять минимум для каждых 2 последовательных значений, то есть

min(5., 4.) = 4.
min(8., 3.) = 3.

есть ли векторизованный способ сделать это и все еще получаете обратно относительный индекс минимума? Значение, которое я хочу получить как вывод:

min_index = [1, 1]
#min_index[0] == 1 as 4. is the minimum of (5., 4.) and is in index 1 of (5., 4.)
#min_index[1] == 1 as 3. is the minimum of (8., 3.) and is in index 1 of (8., 3.) 

Ответы [ 2 ]

2 голосов
/ 08 марта 2020

Я думаю, что изменение твоего тензора сделает это намного проще. После этого torch.min автоматически возвращает минимальные значения и индексы.

import torch

values = torch.tensor([5., 4., 8., 3.])
values_reshaped = values.reshape(-1,2) # works for any length
minimums, index = torch.min(values_reshaped, axis = -1)
print(minimums) # tensor of the minimum values
print(index) # tensor of indexes
0 голосов
/ 08 марта 2020

Здесь реализация numpy:

a = np.random.randint(0,100, 10)
a
array([24, 60, 33, 65,  7, 84, 44, 67, 96, 18])

# Compare pairwise and get all pairs min relative index
min_index = np.argmin([a[:-1], a[1:]], axis=0)
min_index
array([0, 1, 0, 1, 0, 1, 0, 0, 1], dtype=int64)

# Pairs (24,60), (60,33), (33,65), and so on..

# Adding index and array location we get the global index of pairs min in the original array
global_min_index = [i+e for i,e in enumerate(min_index_tmp)]
global_min_index 
[0, 2, 2, 4, 4, 6, 6, 7, 9]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...