根据其他结果对数据进行排名

Ranking Data Based on Other Results

我在下面的代码中有两组数据,它们是 linked - 5 'networks',以及通过 'TT' 值的 5 个奇异结果。每个 TT 值对应一个网络集(例如 TT1=100 是网络 1 的结果)。

我的目标是能够根据 TT 结果对 5 个网络进行排名。

network1 = [0,1,0,0,0,0,1,0,0,0,1,1,0,0,1]
network2 = [0,1,0,0,0,0,0,0,1,0,1,1,0,0,1]
network3 = [0,1,0,0,0,0,0,1,0,0,1,1,0,0,1]
network4 = [0,1,0,0,0,0,0,0,0,0,1,1,0,1,1]
network5 = [0,1,1,0,0,0,0,0,0,0,1,1,0,0,1]

networks = [network1, network2, network3, network4, network5]

TT1 = 100
TT2 = 70
TT3 = 80
TT4 = 105
TT5 = 120

TTranks = [TT1,TT2,TT3,TT4,TT5]

s = {x: i for i, x in enumerate(sorted(set(TTranks)))}
ranks = [s[x] for x in TTranks] 
print(ranks) 

此过程的以下结果仅对 TT 值进行排名,尽管我不确定如何link它以便相应的网络也得到适当的排名。

[2, 0, 1, 3, 4]

也就是说,我希望它将 5 个网络排列为网络 2、网络 3、网络 1、网络 4、网络 5。 这将非常有用,因为我希望稍后能够从订购的网络结果中调用。

此外,有没有更有效的方法来完成这个过程?

感谢大家的帮助!!

能否请您解释一下网络和 TTranks 是如何连接的?代码显示对这两个没有依赖性。

您只是想要用于排序 TTrank 的索引?那么你应该避免 set(TTranks),因为顺序不会保留在集合中,重复项也会被删除。有几种方法可以获取排序索引,我更喜欢 numpy 的 argsort:

import numpy as np
print(np.argsort(TTranks)) 
# [1 2 0 3 4]

您可以使用 sort/sorted 函数的 key 可选参数来根据自定义值排序。

代码

network1 = [0,1,0,0,0,0,1,0,0,0,1,1,0,0,1]
network2 = [0,1,0,0,0,0,0,0,1,0,1,1,0,0,1]
network3 = [0,1,0,0,0,0,0,1,0,0,1,1,0,0,1]
network4 = [0,1,0,0,0,0,0,0,0,0,1,1,0,1,1]
network5 = [0,1,1,0,0,0,0,0,0,0,1,1,0,0,1]

networks = [network1, network2, network3, network4, network5]

TT1 = 100
TT2 = 70
TT3 = 80
TT4 = 105
TT5 = 120

TT = [TT1, TT2, TT3, TT4, TT5]

sorted_networks_with_indices = sorted(enumerate(networks), key=lambda t: TT[t[0]])

sorted_indices = [i for i,n in sorted_networks_with_indices]
sorted_networks = [n for i,n in sorted_networks_with_indices]

print(sorted_indices)
print(sorted_networks)

输出:

[1, 2, 0, 3, 4]
[[0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1],
 [0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1],
 [0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1],
 [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1],
 [0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1]]

代码解释

enumerate(networks) 列出 i,n 对,其中 i 是索引,n 是网络。这些对用 sorted 函数排序,用于排序的键是 lambda t: TT[t[0]]。这里 t 是对 i,n,所以 t[0] 是索引 i。因此TT[t[0]]是index-network对t.

对应的TT

关于 0-index 的注意事项

sorted_indices 中的索引是 [1, 2, 0, 3, 4] 而不是 [2, 3, 1, 4, 5] 因为 python 列表是 0 索引的,但这对应于 network2,network3,network1,network4,网络5。如果您对此不满意,可以将相关行替换为:

sorted_indices = [i+1 for i,n in sorted_networks_with_indices]

参考资料