Voglio trovare efficientemente permutazioni di un vettore che ha valori legati.permutazioni itertools python con valori legati
esempio se mi vorrebbe per ottenere come output tutte le combinazioni di [0,0,1,2], [0,0,2,1], [0,1,2,0]
e così via, ma non voglio per ottenere [0,0,1,2]
due volte che è ciò che la norma itertools.permutations(perm_vector)
darebbe.
Ho provato quanto segue ma funziona molto lento quando perm_vector grows
in len:
vectors_list = []
for it in itertools.permutations(perm_vector):
vectors_list.append(list(it))
df_vectors_list = pd.DataFrame(vectors_list)
df_gb = df_vectors_list.groupby(list(df_vectors_list.columns))
vectors_list = pd.DataFrame(df_gb.groups.keys()).T
La questione è più generale di "speed-up" la natura, in realtà. Il tempo principale è dedicato alla creazione delle permutazioni di lunghi vettori - anche senza la duplicità, la creazione di permutazioni di un vettore di 12 valori unici prende un "infinito". C'è la possibilità di chiamare itertools iterativamente senza accedere ai dati di tutte le permutazioni ma lavorando su molti di essi?
Eventuali duplicati di [Perché itertools.permutations di Python contengono i duplicati? (Quando l'elenco originale ha duplicati)] (http://stackoverflow.com/questions/6534430/why-does-pythons-itertools-permutations-contain-duplicates-when-the-original) –
Ecco un collegamento [link] esterno (http://blog.bjrn.se/2008/04/lexicographic-permutations-using.html) da un commento nel thread a cui fa riferimento il commento sopra che potrebbe essere utile. – Praveen
c'è una ricetta per questo nel modulo itertools, controlla la ricetta unique_everseen: https://docs.python.org/3/library/itertools.html#itertools-recipes – Copperfield