Применить ранг в перестановке списка - PullRequest
1 голос
/ 15 января 2020

У меня есть два списка:

l1 = [0, 1, 12, 33, 41, 52, 69, 7.2, 8.9, 9.91]
l2 = [45, 51]

Мне нужно получить все возможные комбинации (без повторений) из l1 с размером, равным длине l2. Затем примените метрику рейтинга c к l2 и l1 (для каждой комбинации). Наконец, мне нужно получить ближайший метри c по отношению к. l1 и lx (lx - перестановочный список).

То, что я пробовал до сих пор (пока это больше похоже на псевдокод):

import numpy as np

def apply_metric(predictions, targets):
    return np.sqrt(((predictions - targets) ** 2).mean())

l1 = [0, 1, 12, 33, 41, 52, 69, 7.2, 8.9, 9.91]
l2 = [45, 51]

for item in l1:
    #do the possible combinations
    temp_result = apply_metric(np.array(l2), np.array(permuted_items))

output :

best metric = 0 (identical)
best list = [45, 51]

1 Ответ

0 голосов
/ 15 января 2020

Вы можете использовать перестановку itertools , чтобы получить свой перестановочный список, а затем применить метри c.

import numpy as np
import itertools as it

def apply_metric(predictions, targets):
    return np.sqrt(((predictions - targets) ** 2).mean())

l1 = [0, 1, 12, 33, 41, 52, 69, 7.2, 8.9, 9.91]
l2 = [45, 51]

temp_dict = {}
for elements in it.permutations(l1, len(l2)):
    temp_result = apply_metric(np.array(l2), np.array(elements))
    temp_dict.update({temp_result : list(elements)})

print(f"Best metric: {min(temp_dict)}")
print(f"Best list: {temp_dict[min(temp_dict)]}")

Что дает:

Best metric: 2.9154759474226504
Best list: [41, 52]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...