0

サンプル入力ファイル (実際の入力ファイルには約 50,000 エントリが含まれます):

615 146 
615 180 
615 53  
615 42  
615 52  
615 52  
615 51  
615 45  
615 49
616 34
616 44
616 42
616 41
616 42
617 42
617 43
617 42
685 33
685 33
685 33
686 33
686 33
687 47
687 68
737 449
737 41
737 1138
738 46
738 53  

列の各値を 615,615,615 のような同じ値と比較する必要があります。グループ化する必要があります。クラスターには、146,180 ..... 45,49 のような column1 の値を含める必要があります。次に、クラスターを分割して、次の同じ値のセット 616,616,616 の別のクラスターを形成する必要があります。 .........すぐ

私が書いたコードは次のとおりです。

from __future__ import division
from sys import exit
h = 0
historyjobs = []
targetjobs = []


def quickzh(zhlistsub,
    targetjobs=targetjobs,num=0,denom=0):

 li = [] ; ji = []
 j = 0
 for i in zhlistsub:
    x1 = targetjobs[j][0]

    x = targetjobs[i][0]

    num += x
    denom += 1
    if x1 >= 0.9 * (num/denom):#to group all items with same value in column 0 
      li.append(targetjobs[i][1])
    else:
      break     
 return li


 def filewr(listli):
 global h
 s = open("newout1","a")
 if(len(listli) != 0):
      h += 1
      s.write("cluster: %d"%h)
      s.write("\n")
      s.write(str(listli))
      s.write("\n\n")
 else:
      print "0"


def new(inputfile,
historyjobs=historyjobs,targetjobs=targetjobs):
zhlistsub = [];zhlist = []
k = 0 

with open(inputfile,'r') as f:
    for line in f:
        job = map(int,line.split())
        targetjobs.append(job)
    while True: 
     if len(targetjobs) != 0:

       zhlistsub = [i for i, element in enumerate(targetjobs)]

       if zhlistsub:
          listrun = quickzh(zhlistsub)
          filewr(listrun)
       historyjobs.append(targetjobs.pop(0))
       k += 1
     else:
         break

new('newfinal1')

私が得た出力は次のとおりです。

 cluster: 1
 [146, 180, 53, 42, 52, 52, 51, 45, 49, 34, 44, 42, 41, 42, 42, 43, 42, 33, 33, 33, 33, 33, 47, 68, 449, 41, 1138, 46, 53]

 cluster: 2
 [180, 53, 42, 52, 52, 51, 45, 49, 34, 44, 42, 41, 42, 42, 43, 42, 33, 33, 33, 33, 33, 47, 68, 449, 41, 1138, 46, 53]

 cluster: 3
 [53, 42, 52, 52, 51, 45, 49, 34, 44, 42, 41, 42, 42, 43, 42, 33, 33, 33, 33, 33, 47, 68, 449, 41, 1138, 46, 53]
 ..................so on

しかし、私が必要とする出力は次のとおりです。

  cluster: 1
  [146, 180, 53, 42, 52, 52, 51, 45, 49]
  cluster: 2
  [34, 44, 42, 41, 42]
  cluster: 3
  [42, 43, 42]
  _____________________ so on

したがって、必要な結果を得るために条件にどのような変更を加える必要があるかを誰でも提案できますか?それは本当に役に立ちますか?

4

2 に答える 2

1

答えをテストしていませんが、この概念に従ってください

import collections.defaultdict

cluster=defaultdict(list)

with open(inputfile,'r') as f:
    for line in f:
        clus, val = line.split()
        cluster[clus].append(val)

for clus, val in cluster:
    print "cluster" +str(clus)+"\n"
    print str(val)+"\n"
于 2013-09-27T03:32:15.277 に答える