我正在使用sklearn
来计算一些特征值和特征向量,我的问题之一是我想对特征值进行排序,计算它们的累加和并将该数字与某个方差阈值进行比较。例如,一旦我知道前三个特征值就足够了,并且让我超过了该阈值,我将不得不找到对应的特征向量。
赞
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]]
换句话说,我想以与特征值相同的方式对列表的特征向量列表进行排序。
任何建议表示赞赏
答案 0 :(得分:1)
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)
答案 1 :(得分:1)
假设您的基本列表和第二个列表的长度始终相同,这就是我的操作方式(无需使用其他类似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)
然后可以从元组中提取值。
答案 2 :(得分:1)
您可以将未排序的特征值映射到基本列表的值。然后对您的基本列表进行排序,然后使用排序后的列表作为索引来创建排序后的特征值的列表:
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]]