Заказ нескольких списков одновременно с одним в качестве базовой ссылки - PullRequest
0 голосов
/ 31 января 2019

Я использую sklearn для вычисления некоторых собственных значений и собственных векторов, часть моей проблемы заключается в том, что я хочу упорядочить собственные значения, рассчитать кумулятивную сумму по ним и сравнить это число с определенным порогом дисперсии.Как только я узнаю, например, что первые 3 собственных значения достаточны и я преодолею этот порог, мне нужно будет найти соответствующие собственные векторы.

Как это

base_list = [2,3,1,4]
sorted_base_list = sorted(base_list, reverse=True)
>>> [4,3,2,1]
second_list = [[3,3][1,1][4,4][2,2]]

Применение переупорядочения base_list к second_list Я хотел бы получить это

second_list = [[2,2][1,1][3,3][4,4]]

Другими словами, я хочучтобы мой список собственных векторов упорядочивался так же, как мои собственные значения.

приветствуются любые предложения

Ответы [ 3 ]

0 голосов
/ 31 января 2019

Работая в предположении, что ваш базовый список и второй список всегда будут иметь одинаковую длину, вот как я бы это сделал (без использования другой библиотеки, такой как numpy).

Если вы превратите второй список всписок кортежей, где первый элемент кортежа является соответствующим элементом в базовом списке, вы можете отсортировать второй список так, как вам нужно.

for i in range(len(second_list)):
    second_list[i] = (base_list[i], second_list[i])

Теперь вы можете отсортировать второй список так же, какбазовый список:

sorted_second_list = sorted(second_list, reverse=True)

Затем вы можете извлечь значения из кортежей.

0 голосов
/ 31 января 2019

Вы можете сопоставить свои несортированные собственные значения со значениями базового списка.Затем отсортируйте свой базовый список и затем создайте список отсортированных собственных значений, используя отсортированный список в качестве индексов:

base_list = [2, 3,1,4]
second_list =[[3,3],[1,1],[4,4],[2,2]]
eigen_map = {i: eigenvalue for i, eigenvalue in zip(base_list, second_list)}
sorted_list = sorted(base_list)
sorted_eigenvalues = [eigen_map[index] for index in sorted_list]

. Это дает: [[4, 4], [3, 3], [1, 1], [2, 2]]

0 голосов
/ 31 января 2019
import numpy as np
indices = np.argsort(base_list)[::-1]
s_list = [second_list[i] for i in indices]
print(s_list)
#[[2, 2], [1, 1], [3, 3], [4, 4]]
#Note: your second list is missing commas between lists.

Если вы не хотите использовать numpy

indices = sorted(range(len(base_list)), key=base_list.__getitem__, reverse=True)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...