根据其他结果对数据进行排名
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]
参考资料
sorted
函数及其 key
参数:https://docs.python.org/3/library/functions.html#sorted
list
的 sort
成员及其 key
参数:https://docs.python.org/3/library/stdtypes.html#list.sort
我在下面的代码中有两组数据,它们是 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
.
关于 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]
参考资料
sorted
函数及其key
参数:https://docs.python.org/3/library/functions.html#sortedlist
的sort
成员及其key
参数:https://docs.python.org/3/library/stdtypes.html#list.sort