2016-04-08 17 views
1

Büyük veri kümesini hesaplamaya çalıştığımda bellek hatam verecek çünkü apriori using python'dan yüklediğim apriori algoritmasından bazı satır kodlarını bozmayı denemek istiyorum. Burada yeni bulduğum bir problem var.Python işlemini parçalama

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]) 

hata tetikleyen dönüş var gerçek boyutunu bilmek istiyorum, bu yüzden bu olmaya arıza olanlar kodu deneyin.

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 

yüzden her adımı izleyebilir, ama benim arıza kodu orijinal biriyle aynı sonucu verir vermez.

Neyi özlüyorum? Ve eğer benim yaklaşımlarım yanlış giderse bana gerçek bir çözüm sunabiliyorsanız çok sevineceğim. Teşekkür ederim.

+0

sadece kaldırmayı deneyin gerektirir '[] 'set içinde. Bu gereksiz yere bir liste oluşturur, çünkü hemen bir set haline getirilerek atılır. Kullanılabilirse, bir hata raporu veya orijinal kaynağa çekme isteği de oluşturabilirim çünkü bu, görebildiğim bir dezavantajı olmayan bir optimizasyon. –

+0

Yeh, ilk kod segmentinde, liste döndürmeden önce bir kümeye dönüştürülür. İkinci kod bölümünde sadece listeyi döndürürsünüz. – Pedro

cevap

0

Orijinalin bir grup döndürdüğünü ve bir liste döndürdüğünü düşünüyorum.

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) 

Ayrıca ben orijinal aşağıdaki düzenleme ile bellek önemli miktarda tasarruf edebilirsiniz düşünüyorum: Bu bir dizi anlama olduğunu

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} 

piton> = 2.7

+0

teşekkür ederim, ilki benim için çalışıyor. İkinci seçeneği uygulamaya çalışırım ve yakında rapor veririm. –

İlgili konular