2015-09-08 21 views
5

Innanzitutto fammi vedere cosa voglio fare.
Ho una matrice,AttributeError: l'oggetto 'numpy.int32' non ha attributo 'append'

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

Tutto quello che voglio fare è quello di selezionare la posizione dei numeri ripetuti nella matrice e stamparlo in una matrice x_new dove:

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) 

Fino ad ora quello che ho fatto è:

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'  

Ma alla linea di a.append sta mostrando:

L'oggetto 'numpy.int32' non ha attributo 'aggiungi'

Qualcuno può dirmi come superare questo errore? Grazie

risposta

5

In Python 2.x, le variabili che si usa all'interno di lista di perdite nel namespace circostante, in modo variabile a si usa nella lista di comprensione -

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

Cambia la variabile a definita come lista agli elementi di x.

Esempio per questo -

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

si dovrebbe usare altro nome all'interno della lista comprehensin, e sarebbe utile se si utilizzano nomi più significativi per le variabili, che ridurrebbe il rischio di incorrere in tali questioni.

Questo problema non dovrebbe verificarsi in Python 3.x, come in Python 3.x, list comphrehension ha uno spazio dei nomi proprio.

+0

oops scusa ... ti ho preso. Fammi controllare. Grazie mille –

1

si riassegna la variabile a: Nella prima riga a=[], ma si utilizza ancora una volta a generatore ss:

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

semplice esempio:

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

oops scusa ... ti ho preso. Fammi controllare. Grazie mille –

2

questo è numpy soluzione al tuo problema

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

Grazie mille amico :) –

Problemi correlati