2016-04-08 1 views
1

Je veux essayer de décomposer un code de ligne de l'algorithme apriori que j'ai téléchargé de apriori using python parce qu'il donnera mon erreur de mémoire quand j'essaye de calculer l'ensemble de données énorme. Voici un problème que je viens de trouver. Je veux connaître la taille réelle de retour var lorsque l'erreur est déclenchée, donc j'essaie de décomposer ce code pour qu'il en soit ainsi.Détruire le processus python

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 

afin que je puisse suivre toutes les étapes, mais mon code de dépannage ne donne pas le même résultat avec l'original.

Qu'est-ce que je manque quand même? Et aussi j'apprécierai très si vous pouvez me donner la solution réelle si mes approches vont mal. Merci.

+0

juste essayer de retirer la '[]' set intérieur. Cela crée une liste inutilement, car elle est immédiatement rejetée en la transformant en ensemble. Si elle est disponible, je créerais aussi un rapport de bug ou une requête de pull à la source d'origine, parce que c'est une optimisation qui n'a aucun inconvénient que je peux voir. –

+0

Oui, dans le premier segment de code, la liste est convertie en ensemble avant de le renvoyer. Dans le deuxième segment de code, vous venez de retourner la liste. – Pedro

Répondre

0

Je pense qu'il se peut que l'original renvoie un ensemble, et vous renvoyez une liste.

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) 

Aussi je pense que vous pouvez économiser une quantité considérable de mémoire avec l'édition suivante de l'original:

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} 

Ceci est une compréhension de jeu nécessite python> = 2.7

+0

merci, le premier travaille pour moi. ill essayer d'appliquer la deuxième option et fera bientôt rapport, .. –