Ich habe eine 6x6 Matrix als eine Liste von Listen in Python. Die Matrix ist in 4 quadratische Blöcke der Größe 3x3 unterteilt. Ich möchte einen Weg, eine Transponierung von nur 1 Block zu machen. Ich kann es mit der traditionellen Methode machen, jedes Element durchzugehen und es in ein anderes Array und zurück zu kopieren, aber ich möchte sehen, ob es einen besseren Weg gibt (das Transponieren einer Matrix in Python kann in einer Zeile mit Hilfe von Zip-Methode)
für zB das ist die Darstellung der Matrix und ihrer Blöcke
%Vor%und rotieren (3, rechts) sollte dazu führen
%Vor%Ich möchte eine Methode finden, die eine Blocknummer aufnimmt und nur diesen Block nach links oder rechts dreht. Gibt es einen einfachen Weg, es zu tun?
Aufbauend auf Sven Marnachs Idee, np.rot90
zu verwenden, gibt es hier eine Version, die den Quadranten im Uhrzeigersinn dreht (wie gewünscht?). Im Schlüsselschritt
a copy()
wird auf der rechten Seite (RHS) verwendet. Ohne die copy()
, da die Werte block3
zugewiesen sind, werden auch die zugrunde liegenden Daten geändert, die auf der RHS verwendet werden. Dies verwirrt die Werte, die bei aufeinanderfolgenden Zuweisungen verwendet werden. Ohne copy()
werden mehrere gleiche Werte über block3
verteilt.
Ich sehe keine Möglichkeit, diese Operation ohne eine Kopie auszuführen.
%Vor%Für was es wert ist, hier ist, wie einfach dies in NumPy:
%Vor%Hier ist eine Methode, um einen "Block" aus der von Ihnen bereitgestellten Matrix zu drehen:
%Vor% right
ist ein Bool
Dies wird ein list of lists
können Sie auch verwenden:
%Vor%, aber das wird list of tuples
BEARBEITEN:
Wenn wir über eine Matrix vom Typ sprechen:
%Vor% Sie würden auf Block 3 zugreifen, indem Sie matrix[2]
, so würde die Rotationsfunktion wie folgt verwendet werden:
rotate(matrix[2], True) #rotate block 3, right