Ich habe ein Array von Arrays, die nicht notwendigerweise dieselbe Größe haben und die ich auf folgende Weise kombinieren möchte.
Jedes verschachtelte Array wird in der Reihenfolge gescannt, in der es im Hauptarray erscheint. Das gescannte Element wird mit dem letzten Element jedes Arrays vor dem aktuellen und dem ersten Element jedes Arrays nach dem aktuellen kombiniert.
Beispiel:
Code: Select all
all_arrays = [[1.1, 1.05], [2.1, 2.05, 2], [3.1, 3.05]]
Würde wie folgt kombiniert:
Code: Select all
[
[1.1, 2.1, 3.1],
[1.05, 2.1, 3.1],
[1.05, 2.05, 3.1],
[1.05, 2, 3.1],
[1.05, 2, 3.05]
]
In der Praxis ist all_arrays eine Liste, die verschachtelten Arrays sind Numpy-Arrays und jede Kombination sollte ein Tupel der Länge = 3 sein. Meine aktuelle Implementierung sieht so aus:
Code: Select all
combinations = []
for ii in range(len(all_arrays)):
while len(all_arrays[ii]) > 1:
combinations.append(next(zip(*all_arrays)))
all_arrays[ii] = all_arrays[ii][1:]
combinations.append(next(zip(*all_arrays)))
Es funktioniert gut, aber ich hätte zwei Fragen. Erstens: Hat diese Art von Kombination einen Namen? Ich frage beides nach meinem persönlichen Wissen, aber auch, weil es, wenn es einen Namen hat, wahrscheinlich bereits einen Algorithmus gibt, der es schneller implementiert hat als ich. Zweitens: Selbst wenn es keinen Namen hat, sehen Sie eine bessere Möglichkeit, es zu implementieren (vielleicht sogar mit einem anderen Datentyp)?