2015-09-08 16 views
5

Lassen Sie mich zuerst zeigen, was ich tun möchte.
Ich habe eine Matrix,AttributeError: 'numpy.int32' Objekt hat kein Attribut 'append'

x = [1, 2, 1, 2, 3, 3, 2, 3, 1, 2] 

Alles, was ich tun möchte, ist Position der wiederholten Zahlen im Array auszuwählen und in einer Matrix drucken x_new wo:

x_new[0]= [0,2,8] (for similar position of repeated 1's in x) 
x_new[1]=[1,3,6,9](for similar position of repeated 2's in x) 
x_new[2]=[4,5,7] (for similar position of repeated 3's in x) 

Bis jetzt, was ich getan habe, ist:

a=[]  
x=m[:,3] #x=np.array([1, 2, 1, 2, 3, 3, 2, 3, 1, 2])  
ss=set([i for i in x if sum([1 for a in x if a == i]) > 1])  
lenss=len(ss)  
for ln in range(lenss):  
    for k in range(10):  
     if(x[k]== list(ss)[ln]):  
      print k  
     a.append(ln)  
    print 'next'  

Aber am a.append Linie es zeigt:

'numpy.int32' Objekt hat kein Attribut 'anhängen'

Kann mir bitte jemand sagen, wie ich diesen Fehler beheben kann? Dank

Antwort

5

In Python 2.x, verwenden Sie die Variablen, die Sie im Inneren Liste Verständnis Leck in den umgebenden Namensraum, so dass die a Variable, die Sie verwenden in der Liste Verständnis -

ss=set([i for i in x if sum([1 for a in x if a == i]) > 1]) 

Ändert die a Variable, die Sie definiert als Liste zu Elementen von x.

Beispiel hierfür -

>>> i 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
NameError: name 'i' is not defined 
>>> s = [i for i in range(5)] 
>>> i 
4 

Sie sollten verschiedene Namen in der Liste comprehensin verwenden, und es würde helfen, wenn Sie mehr aussagekräftigen Namen für Ihre Variablen verwenden, das würde die Gefahr läuft, in einem solche Probleme reduzieren.

Dieses Problem sollte in Python 3.x nicht auftreten, wie in Python 3.x hat List Comprehension einen eigenen Namespace.

+0

oops sorry ... hab dich. Lass mich das überprüfen. Vielen Dank –

1

zuweisen Sie Ihre Variable a: In der ersten Zeile a=[], aber Sie verwenden wieder a in ss-Generator:

ss=set([i for i in x if sum([1 for ein in x if a == i]) > 1])

Einfaches Beispiel:

>>> [x for x in range(10)] 
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 
>>> x 
9 
>>> 
+0

oops sorry ... hab dich. Lass mich das überprüfen. Vielen Dank –

2

dies numpy Lösung für Ihr Problem

x = np.array(x) 
unique = np.unique(x) 
[np.where(x == unique_num) for unique_num in unique] 
+0

Vielen Dank Kumpel :) –

Verwandte Themen