У меня есть список компаний (cmp_list), в котором я сравниваю каждое из значений с другим, используя какой-то собственный алгоритм, и придумала эту матрицу (Score Matrix) для всех баллов.если вы прочитаете матрицу, вы увидите, что row1 и col1 равны 1 bcoz, первый элемент cmp_list сопоставлен сам с собой, и аналогично row3 и col3 равен 1. Теперь row1, col3 равен 0, потому что первый элемент в cmp-list сопоставлен с третьимэлемент в cmp_list, т.е. совпадающий с Walmart и Home Depot, поэтому, очевидно, счет равен 0.
Я хочу получить список всех элементов в cmp_list, чей счет> 0,5
cmp_list = ['Walmart', 'Walmart super', 'Home Depot', 'Sears', 'Home Depot Center', 'Home Depot']
СчетМатрица:
[[1. 1. 0. 0. 0. 0. ]
[1. 1. 0. 0. 0. 0. ]
[0. 0. 1. 0. 0.66666667 0.81649658]
[0. 0. 0. 1. 0. 0. ]
[0. 0. 0.66666667 0. 1. 0.81649658]
[0. 0. 0.81649658 0. 0.81649658 1. ]]
Требуемый вывод:
cmp_list_1 = ['Walmart', 'Walmart super']
cmp_list_2 = ['Home Depot', 'Home Depot Center', 'Home Depot']
Я пытался сделать это, используя вложенный цикл for, но я ищу что-то более Pythonic икратко для этого:
Мой код пока:
if(np.count_nonzero(score_matrix - np.diag(np.diagonal(score_matrix)))) > 0:
rowsi, cols = np.nonzero(score_matrix)
for it in zip(rowsi,cols):
if np.where(score_matrix[it[0]][it[1]] >= 0.5):