ich nutze Python 2.7 mit IPython/Numpy und versuche gerade eine mehrdimensionale Liste zu formen. Dies gelingt mit im einfachen Fall, aber unter bestimmten (großen) Parameterwerten/-ausmaßen läuft mein Rechner Ewigkeiten bzw. unendlich.
Ich habe folgende Parameter als kleines Beispiel:
Code: Alles auswählen
a = [0 2 1 3 4]
b = len(a)
c = [4 3 2 1 0]
Code: Alles auswählen
def Condition(a, b, c):
from itertools import product
scope = []
conditions = []
array = []
for i in range(b):
array = array + [range(a[i])]
for subset in product(*array):
scope = scope + [subset]
for subset in scope:
for j in range(len(c)):
conditions = conditions + [[np.asarray(subset), c[j]]]
np.savetxt('test.txt', conditions, delimiter=',', fmt="%s")
return conditions
Code: Alles auswählen
[[0 0 0 0 0], 4]
…
[[0 2 1 3 4], 0]
(Die zweite „subset“-Schleife habe ich aufgrund einer leichten Performance-Verbesserung hinzugefügt. Mit ist klar, dass die in die vorhergehende integriert werden kann.)
Bei diesem Beispiel funktioniert die Funktion ohne Probleme, aber soweit ich die Parameter erhöhe (und das benötige ich fürs weitere Vorgehen), ist die Funktion nicht wirklich nutzbar. Ich meine ich brauche Parameterwerte im Bereich von len(c)=200 sowie größeren und längeren Werten in dem Arrays „c“ (so ca. jeweils 100 als Integer-Wert).
Ich habe schon versucht die Itertool-Funktion für mein Beispiel zu vereinfachen, aber das bekomme ich eindeutig nicht hin. Inwieweit ich die Funktion richtig implementiert habe weiß ich nicht (bin kein Profi). Hab nur im Internet z. B. Multiprocessing gefunden, aber die Liste als Ergebnis der Funktion hat eine Länge von 1… das hilft mir gar nicht weiter…
Code: Alles auswählen
import multiprocessing as mp
pool = mp.Pool(processes=4)
results = [pool.apply(Condition, args=(a, b, c))]
print results