Ich schreibe einen Komprimierungsalgorithmus, um die Größe einer kombinatorischen Ausgabe zu reduzieren, die eine Permutation vieler Eingangszustände ist. Das Ändern des Formats ist keine Option.Python3 - verlustfreie Komprimierung von langen verschachtelten Listen
Ziel ist es, Informationen über Kombinationen von Eingaben zu erhalten, die eine bestimmte Ausgabe erzeugen, so dass einzelne Eingabezustände in Token umgewandelt werden können, wenn sie die Ausgabe nicht beeinflussen, abhängig von allen anderen Eingabezuständen.
Ich habe zwei Liste von Listen,
inputs = [ | outputs = [
[1,0,0.5,"foo"], | [-0.25,"cold"],
[0,1,-0.5,"poo"], | [0.66,"hot"],
. | .
. | .
. | .
] | ]
Eigenschaften:
Ein- und Ausgangslisten sind gleich lang und sehr lang, so dass Speicher ist ein Anliegen
Bereits gepaart mit Index
Unterlisten sind kurz a nd intern konsistent in Länge und Art innerhalb der Eingangs- und Ausgangslisten
Teillisten von heterogenem Typ zusammengesetzt sind, aber ich kann sie alle zu bespannen gegossen, wenn nötig
Ich werde sie in eine Hash passieren Funktion wie so:
list(map(lambda results: hashfunction(results[0],results[1]), list(zip(inputs,outputs))))
Soweit ich weiß, das ist ein Speicher effizienter Weg, um sie zu durchlaufen, aber bevor ich das tue, möchte ich ihre Länge so viel wie möglich reduzieren.
Da die Unterlisten intern konsistent sind, und ich weiß, einige Indizes boolean sind, für gleiche Ausgangsteillisten kann ich die Eingangsunterlisten wie dies ohne Informationsverlust reduzieren:
inputs = [... ,[1,0,0.5,1],[0,0,0.5,1], ...]
outputs = [... ,[0.3,"warm"],[0.3,"warm"], ...]
Ist tokenized in-situ als:
inputs = [... ,["don't care",0,0.5,1], ...]
outputs = [... ,[0.3,"warm"], ...]
und die Länge der beiden Ein- und Ausgänge von 1.
Weiterhin reduziert werden, will ich höhere Radix Eingangs col zusammenzupressen UMNS, zum Beispiel, wenn ich weiß, dass Index 2 in jedem Eingang sublist nimmt nur die Werte [-0.5,0,0.5], wenn ich dieses Muster finden:
inputs = [... ,["don't care",0,-0.5,1],["don't care",0,0,1],["don't care",0,0.5,1], ...]
outputs = [... ,[0.1,"cake"],[0.1,"cake"],[0.1,"cake"], ...]
Ich mag sie reduzieren ähnlich:
inputs = [... ,["don't care",0,"don't care",1], ...]
outputs = [... ,[0.1,"cake"], ...]
Leider sind die Muster möglicherweise nicht nebeneinander, so dass ich zu großen Mengen an Sortierung und Neusortierung zurückgreifen muss, um reduzierbare Muster zu finden und nicht nur die Ergebnismenge nicht genug zu komprimieren, die Laufzeit/Speicher ist unhaltbar.
Alle Ratschläge sehr geschätzt.
Dank
Ich bin Sory, aber ich verstehe nicht, was Sie überhaupt zu tun versuchen, der Titel der Frage sagt _Lossless compression_, aber wenn Sie Zahlen ersetzen mit "" egal "ist nicht das Verlieren von Informationen ? –
Es tut mir leid, ich habe den Beitrag bearbeitet, um ein wenig zu verdeutlichen. Ich möchte auf die kombinatorische Information des Eingangsvektors und des von ihm erzeugten Ausgangsvektors verlustfrei sein, so dass die Reduzierung einzelner Zustände innerhalb des Eingangsvektors in Ordnung ist, solange diese Information keine Auswirkung auf den Ausgangsvektor hatte. – 7esper