2017-06-20 7 views
-1

私は以下の問題を抱えています。私はパラメータテストを行い、すべての単一パラメータの組み合わせごとに新しいオブジェクトを作成します。オブジェクトには、属性jaccard係数と属性IDがあります。すべてのステップで、私はオブジェクトのcoeeficient jaccardを格納したい。最後に、私はトップ10のjaccardのcoeefcientとその対応するIDをします。Python:上位10個の数値を保存する最良の方法

r=["%.2f" % r for r in np.arange(3,5,1)] 
fs=["%.2f" % fs for fs in np.arange(2,5,1)] 
co=["%.2f" % co for co in np.arange(1,5,1)] 
frc_networks=[] 

bestJC = [] 
bestPercent = [] 
best10Candidates = [] 
count = 0 
for parameters in itertools.product(r,fs,co): 

    args = parser.parse_args(["path1.csv","path2.csv","--r",parameters[0],"--fs",parameters[1],"--co",parameters[2]]) 

    if not os.path.isfile('FCR_Network_Coordinates_ID_{}_r_{}_x_{}_y_{}_z_{}_fcr_{}_co_{}_1.csv'.format(count, args.r, args.x, args.y, args.z, args.fs,args.co)): 

     FRC_Network(count,args.p[0],args.p[1],args.x,args.y,args.z,args.r,args.fs,args.co) 

属性が

+0

アム私は何かが欠けているか、単に最初の後に何かをオフにチョッピングし、リストをソートしてます10の要素がそのトリックをしますか? (注意:これは厳密に必要なものよりも対数的に多くの作業ですが、私はあなたに余裕があると確信しています) – 5gon12eder

+0

ええ、私はjaccard coeeficientリストをソートしてそれを選ぶことができました。 IDSのリスト。 – Varlor

+0

私はリスト全体を維持することを迷惑にならないでしょう。 'for heapループが繰り返すので最大10個だけを維持するには、[' heapq.heappushpop() '](https://docs.python.org/2/library/heapq.html#heapq.heappushpop)を使います。そうすれば、心配する人は決して少なくありません。 –

答えて

1

FRC_Network.IDとFRC_Network.JCによって呼び出すことができます私はこのためheapq.heappushpop()を使用したいと思います。そうすれば、入力セットの大きさにかかわらず、データ要件は10タプルのリストに限定されます。

JCIDのパラメータを保持するタプルの使用に注意してください。比較は辞書編集的なので、これは常にJCでソートされます。

また、.sort()への最後の呼び出しはオプションです。ベスト10だけを望むなら、その通話をスキップしてください。あなたが10人を順番に欲しいなら、電話をしてください。ここで

import heapq 

#UNTESTED 
best = [] 
for parameters in itertools.product(r,fs,co): 
    # ... 
    if len(best) < 10: 
     heapq.heappush(best, (FRC_Network.JC, FRC_Network.ID)) 
    else: 
     heapq.heappushpop(best, (FRC_Network.JC, FRC_Network.ID)) 
best.sort(reverse=True) 

は、コンセプトを実証テストしたバージョンです:

import heapq 
import random 
from pprint import pprint 

best = [] 
for ID in 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ': 
    JC = random.randint(0, 100) 
    if len(best) < 10: 
     heapq.heappush(best, (JC, ID)) 
    else: 
     heapq.heappushpop(best, (JC, ID)) 
pprint(best) 

結果:

[(81, 'E'), 
(82, 'd'), 
(83, 'G'), 
(92, 'i'), 
(95, 'Z'), 
(100, 'p'), 
(89, 'q'), 
(98, 'a'), 
(96, 'z'), 
(97, 'O')] 
+0

ニース、私はそれをテストします:) – Varlor

関連する問題