2017-09-29 4 views
0

Je ne peux pas sembler trouver la question ici que je reçois de problème de gamme:Index hors d'erreur de gamme en Python (IndexError: liste des index hors de portée)

layerZ = [layer_1,layer_2,layer_3,layer_4,layer_5,layer_6,layer_7,layer_8,layer_9,layer_10,layer_11,layer_12,layer_13] 
    for x in range(0, 12): 
     layerZ_total = [np.size(layerZ[x])] 
     layerZ_sp = [np.count_nonzero(layerZ[x]==0)] 
     layerZ_nonSp = [np.count_nonzero(layerZ[x])] 

     #Printing the results on scree to trace 
     print "Layer:",x+1,"Threshhold:",repr(ths),"Total Parameters: ",layerZ_totParam[x],"# Sp: ",layerZ_sp[x],"# Remained : ",layerZ_nonSp[x],"Sp %: ",float(layerZ_sp[x])/layerZ_total[x] 
+1

Vos listes 'layerZ_total',' lazerZ_sp' et 'layerZ_nonSp' ont toutes la longueur 1, parce que vous les créez à partir de zéro à chaque itération. Ils ne peuvent donc avoir aucun autre index que '0', mais vous avez utilisé' x' pour les indexer. –

+0

Ahh, merci @MartijnPieters. Je devrais utiliser 'layerZ_total [x] = ...' pour chacun d'entre eux alors. droite? – Amir

+3

Je n'ai aucune idée de ce que votre code est censé faire. Tout ce que je peux faire est de souligner la raison de l'erreur. –

Répondre

1

Cela devrait aider:

layerZ = [layer_1,layer_2,layer_3,layer_4,layer_5,layer_6,layer_7,layer_8,layer_9,layer_10,layer_11,layer_12,layer_13] 

layerZ_total = [] 
layerZ_sp = [] 
layerZ_nonSp = [] 


for x in range(0, 12): 
    layerZ_total.append(np.size(layerZ[x])) 
    layerZ_sp.append(np.count_nonzero(layerZ[x]==0)) 
    layerZ_nonSp.append(np.count_nonzero(layerZ[x])) 

    #Printing the results on scree to trace 
    print "Layer:",x+1,"Threshhold:",repr(ths),"Total Parameters: ",layerZ_total[x],"# Sp: ",layerZ_sp[x],"# Remained : ",layerZ_nonSp[x],"Sp %: ",float(layerZ_sp[x])/layerZ_total[x] 

Dans votre code, les listes layerZ_total, layerZ_sp et layerZ_nonSp ont été réinitialisés avec une seule valeur à chaque fois dans la boucle, contenant donc un seul élément à l'intérieur index 0 eux, lorsque vous avez essayé l'accès à certains x index, le list index out of range erreur est apparue.

Et si vous deviez faire un traitement sur tous les layer_* de layerZ liste (selon vos besoins), vous devez range(0, 13) comme après avoir fait cette x prendra les valeurs 0-12 traitement ainsi tous les layer dans votre layerZ liste