Ich habe eine Reihe von (n) geometrischen Formen, die durch eine feste Anzahl (p) von 2D-Punkten definiert sind. Diese Formen sind unabhängig, aber aus Gründen der Effizienz habe ich die Zeit in einem einzigen Array gespeichert. Das Skalieren oder Übersetzen dieser Formen ist einfach, aber ich möchte sie drehen und bin mir nicht sicher, wie das geht. Ich vermute, np.tensordot
ist mein Freund, aber ich kann den Weg nicht finden, es richtig zu benutzen.Mehrere individuelle 2D-Rotation auf einmal
n = 100 # Number of shape
p = 4 # Points per shape
P = np.random.uniform(0, 1, (n, p, 2))
# Scaling
S = 0.5*np.ones(n)
P *= S
# Translating
T = np.random.uniform(0, 1, (n, 1, 2))
P += T
# Rotating
A = np.random.uniform(0, 2*np.pi, n)
cosA, sinA = np.cos(A), np.sin(A)
R = np.empty((n,2,2))
R[:,0,0] = cosA
R[:,1,0] = sinA
R[:,0,1] = -sinA
R[:,1,1] = cosA
np.tensordot(P, R, axes=???)
Was die Form des Ausgangsarray sein würde? – Divakar
Die Form sollte die gleiche sein wie P (jeder Punkt von P wird gedreht) –