ich eine numpy Array wie dieseErstellen Sie eine Matrix aus einem Vektor, wobei jede Zeile eine verschobene Version des Vektors ist
import numpy as np
ar = np.array([1, 2, 3, 4])
und ich möchte ein Array erstellen, die wie folgt aussieht:
array([[4, 1, 2, 3],
[3, 4, 1, 2],
[2, 3, 4, 1],
[1, 2, 3, 4]])
Dabei entspricht jede Zeile ar
, die durch den Zeilenindex verschoben + 1.
Eine einfache Implementierung könnte wie folgt aussehen:
012.ar_roll = np.tile(ar, ar.shape[0]).reshape(ar.shape[0], ar.shape[0])
for indi, ri in enumerate(ar_roll):
ar_roll[indi, :] = np.roll(ri, indi + 1)
was mir die gewünschte Ausgabe gibt.
Meine Frage ist, ob es eine klügere Möglichkeit gibt, dies zu tun, die die Schleife vermeidet.
Das verwendet weniger Speicher als meine Lösung, aber die Ausgabe ist nicht sicher beschreibbar. Ich bezweifle jedoch, dass das ein Problem ist, dies die bessere Lösung zu machen – Eric
Funktioniert gut, danke (upvoted)! – Cleb
@Eric: Was meinst du mit "nicht sicher beschreibbar"? – Cleb