2016-04-08 9 views
1

私は巨大なデータセットを計算しようとすると私のメモリエラーを与えるので、私はapriori using pythonからダウンロードしたaprioriアルゴリズムからいくつかのラインコードを分解しようとします。 ここに私が見つけたばかりの問題があります。Pythonのプロセスを分解してください

def joinSet(itemSet, length): 
     """Join a set with itself and returns the n-element itemsets""" 
     return set([i.union(j) for i in itemSet for j in itemSet if len(i.union(j)) == length]) 

私は、エラーがトリガされたときに戻りVARの実際のサイズを知りたいので、私はこれらのコードは、このように故障してみてください。

def joinSet(itemSet, length): 
    """Join a set with itself and returns the n-element itemsets""" 
    ret = [] 
    for i in itemSet: 
     for j in itemSet: 
      if len(i.union(j)) == length: 
       ret.append(i.union(j)) 
    return ret 

私はすべてのステップを監視できますが、私の内訳コードでは元のものと同じ結果が得られません。

私はとにかく迷っていますか? また、もし私のアプローチが間違っていたらあなたが私に実際の解決策を与えることができれば非常に感謝します。 ありがとうございます。

+0

だけで削除してください'[]'内部のセットです。これは、リストをセットに変換することで直ちに破棄されるため、リストが不必要に作成されます。それが利用可能な場合は、バグレポートを作成するか、元のソースにリクエストを引き渡すこともできます。なぜなら、それは私が見ることができる欠点のない最適化だからです。 –

+0

ええ、最初のコードセグメントでは、リストは返される前にセットに変換されます。 2番目のコードセグメントでは、リストを返すだけです。よかったよ、 – Pedro

答えて

0

元のセットが返され、リストが返されている可能性があります。

def joinSet(itemSet, length): 
    """Join a set with itself and returns the n-element itemsets""" 
    ret = [] 
    for i in itemSet: 
     for j in itemSet: 
      if len(i.union(j)) == length: 
       ret.append(i.union(j)) 
    return set(ret) 

また、私はあなたが元の以下の編集とメモリのかなりの量を節約することができると思う:

def joinSet(itemSet, length): 
     """Join a set with itself and returns the n-element itemsets""" 
     return {i.union(j) for i in itemSet for j in itemSet if len(i.union(j)) == length} 

これは、設定された理解であるのpythonが必要です> = 2.7

+0

、最初のものが私のために働いています。 2番目のオプションを適用しようとするとすぐに報告されます.. –

関連する問題