Wenn wir eine 3 x 3
Rotationsmatrix R
haben, kann es mit v
, eine 3 x N
Array multipliziert werden - eine Anordnung von N
Spaltenvektoren - eine neue 3 x N
Array von gedrehten herzustellen Vektoren, wie hier:Rotation einer Matrix von Vektoren, die durch eine Anordnung von Rotationsmatrizen
v_rotated = R.dot(v)
Angenommen wir eine N x M x 3
Array, N
mal M
Vektoren, die ich mit verschiedenen N
3 x 3
Rotationsmatrizen (eine Rotationsmatrix für jede „Zeile“ von Vektoren) gedreht werden soll. Dies ist direkt mit einer Schleife zu tun, aber gibt es eine schnellere und kompaktere (vektorisierte) Möglichkeit, dies zu tun, z. mit numpy
's dot
oder tensorproduct
?
Beispielcode für Schleifenimplementierung:
from numpy import cos, sin, array, pi, linspace, random
# 100 different rotation matrices:
R = [array([[1, 0, 0], [0, cos(theta), -sin(theta)], [0, sin(theta), cos(theta)]]) for theta in linspace(0, pi, 100)]
# 100 x 200 random vectors:
v = random.random((100, 200, 3))
# rotate vectors in loop:
rotated_v = array([R_.dot(v_.T).T for R_, v_ in zip(R, v)])
Teilen der loopy Code, wenn Sie implementiert haben, so dass wir über eine vorgeschlagene Lösung prüfen könnte? – Divakar
@Divakar hinzugefügt loopyy code (Spielzeugbeispiel natürlich) – sulkeh