|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Jan 2004
Città: Cremona
Messaggi: 3666
|
[Python] Verificare presenza di un array in una lista di array
sono di nuovo qui
sono leggermente migliorato con la programmazione python, sono riuscito a cominciare l'interfaccia con wxPython ed ogni giorno cerco di incrementarne le funzionalità ora però ho un problemino Codice:
lista_diametri_uguali=[]
for indice in range(var.elementi[-1,0]):
uguali=np.nonzero(var.elementi[:,3] == var.elementi[indice,3])[0]
aaa=uguali in lista_diametri_uguali
if aaa:
pass
else:
lista_diametri_uguali.append(uguali)
non capisco perchè alla seconda iterazione mi si blocca dando Codice:
aaa=uguali in lista_diametri_uguali ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all() qualche idea? potrei risolvere convertendo l'array in lista, ma non so come si fa (non l'ho trovato neanche sul sito di numpy) |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Scusami, sono un po' rimbambito oggi, e non capisco come fai a ottenere l=([0,2,3],[1,4],[5])) da v=[1,2,1,1,2,3]
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Jan 2004
Città: Cremona
Messaggi: 3666
|
sono poi riuscito a risolvere, ho trovato il comando che trasforma un array in lista
Codice:
uguali=np.ndarray.tolist(uguali) provo a spiegartelo brevemente (usando l'esempio di prima): - v[0] = 1 (non come assegnazione ma come valore) - np.nonzero(v == v[0]) mi trova gli indici i posizione dei valorio uguali ad elemento0 in vettore (è un vettore anch'esso), per cui [0,2,3] - controllo se questo vettore è già in lista, se c'è pass, se non c'è lo appendo alla lista (nell'esempio che ti ho fatto prima la lista è inizialmente vuota e poi diventa l=([0,2,3]) - v[1]=2 - np.nonzero(v == v[1]) da [1,4] - controllo se è in l, non c'è, per cui lo appendo -> l=([0,2,3],[1,4]) - v[2]=1 - np.nonzero(v == v[2]) da ancora [0,2,3] - è già in l per cui salto - ... e via così teoricamente si ha uno spreco di risorse di calcolo (perchè testo tutti i numeri e non controllo prima se posso evitare di cercare), ma non mi interessa perchè i vettori su cui lo uso sono abbastanza corti, massimo 200 elementi circa |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Ho capito. E non era nemmeno difficile. Chissà dove avevo la testa.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Jan 2004
Città: Cremona
Messaggi: 3666
|
ho un altro piccolo problema (forse non molto piccolo)
devo fare un elenco con i vari gruppi e metterci un checkbox ed un pulsante, non so a priori (mentre scrivo il codice) quanti saranno questi gruppi (dipende ovviamente dalle matrici che gli faccio mangiare), devo per cui creare questi componenti con un ciclo voglio avere abilitato il pulsante solo quando la spunta è attiva io per ora ho preparato questo codice Codice:
class ElencoDiametri(wx.BoxSizer):
def __init__(self,pannello):
wx.BoxSizer.__init__(self,wx.VERTICAL)
self.pannello=pannello
lista_diametri_uguali=[]
n_gruppi=0
for indice in range(int(var.elementi[-1,0])):
uguali=np.ndarray.tolist(np.nonzero(var.elementi[:,3] == var.elementi[indice,3])[0])
if uguali in lista_diametri_uguali:
pass
else:
lista_diametri_uguali.append(uguali)
n_gruppi=n_gruppi+1
self.Add(wx.StaticText(pannello, -1, 'Seleziona i diametri'),0,wx.EXPAND)
self.Add(wx.StaticLine(pannello), 0, wx.EXPAND|wx.TOP|wx.BOTTOM, 10)
hbox=wx.FlexGridSizer(n_gruppi,2,20,20)
self.gruppo_scelto=[]
for indice in range(n_gruppi):
self.gruppo_scelto.append(False)
self.gruppo=0
id_cb=[]
id_pul=[]
self.corr_id_cb={}
self.coor_id_pul={}
for indice in lista_diametri_uguali:
id_cb.append(wx.NewId())
id_pul.append(wx.NewId())
self.corr_id_cb[id_cb[-1]]=self.gruppo
checkbox=wx.CheckBox(pannello, id_cb[self.gruppo], str(indice))
hbox.Add(checkbox,self.gruppo,0)
pulsante=wx.Button(pannello, id_pul[self.gruppo], "Modifica limiti")
pulsante.Enable(self.gruppo_scelto[self.gruppo])
hbox.Add(pulsante,self.gruppo,1)
checkbox.Bind(wx.EVT_CHECKBOX, self.check_sul_box, checkbox, id=id_cb[self.gruppo])
self.gruppo=self.gruppo+1
self.Add(hbox, 0, wx.EXPAND)
def check_sul_box(self, event):
print event.Checked()
print event.GetId()
if self.gruppo_scelto[self.corr_id_cb[event.GetId()]]:
self.gruppo_scelto[self.corr_id_cb[event.GetId()]]=False
else:
self.gruppo_scelto[self.corr_id_cb[event.GetId()]]=True
self.pannello.Refresh()
|
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Purtroppo non ho mai sviluppato GUI con Python, per cui non ti posso aiutare.
Mi servirebbe conoscere in che modo è implementata la gerarchia dei componenti, e sono a zero da questo punto di vista.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Jan 2004
Città: Cremona
Messaggi: 3666
|
mi porta bene scrivere sul forum, un attimo dopo mi viene l'idea buona che mi fa risolvere il problema
)mi sono creato una lista di oggetti pulsante, vado a prendere l'oggetto nella lista da una determinata posizione copio solo le ultime righe Codice:
self.lista_pul=[]
for indice in lista_diametri_uguali:
id_cb.append(wx.NewId())
id_pul.append(wx.NewId())
self.corr_id_cb[id_cb[-1]]=self.gruppo
checkbox=wx.CheckBox(pannello, id_cb[self.gruppo], str(indice))
hbox.Add(checkbox,self.gruppo,0)
pulsante=wx.Button(pannello, id_pul[self.gruppo], "Modifica limiti")
pulsante.Enable(self.gruppo_scelto[self.gruppo])
self.lista_pul.append(pulsante)
hbox.Add(pulsante,self.gruppo,1)
checkbox.Bind(wx.EVT_CHECKBOX, self.check_sul_box, checkbox, id=id_cb[self.gruppo])
self.gruppo=self.gruppo+1
self.Add(hbox, 0, wx.EXPAND)
def check_sul_box(self, event): """evento di check di scelta di un diametro"""
if self.gruppo_scelto[self.corr_id_cb[event.GetId()]]:
self.gruppo_scelto[self.corr_id_cb[event.GetId()]]=False
else:
self.gruppo_scelto[self.corr_id_cb[event.GetId()]]=True
self.lista_pul[self.corr_id_cb[event.GetId()]].Enable(self.gruppo_scelto[self.corr_id_cb[event.GetId()]])
self.pannello.Refresh()
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 01:26.











)








