2つの並列配列、1つは回転行列の配列、もう1つは3D点のグループの配列を与えられています。対応する行列。numpyでのポイントマトリックス乗算の処理グループ
numpy.einsumで各グループをループすることで、私が望むことを達成できました。私はループなしでこれを行う方法があると期待しています。
import numpy as np
N_GROUPS = 10
N_SUBGROUPS = 4
p = np.random.random((N_SUBGROUPS,N_GROUPS,3,)) # N_GROUPS of N_SUBGROUPS of 3D points
M = np.random.random((N_GROUPS,3,3,)) # N_GROUPS of rotation matrices
I = np.linalg.inv(M) # Inverse of M for testing purposes
# Use a loop to transform every subgroup.
for i in xrange(N_SUBGROUPS):
p_ = np.einsum('ij,ijk->ik', p[i], M)
# test
p__= np.einsum('ij,ijk->ik', p_, I)
print np.allclose(p[i],p__)# Returns True
私の状況に対処するためのeinsum表現を書き換えるすべてのヘルプ、または別の方法を使用する方法についての提案をいただければ幸いです:これは、これまで私が持っているコードです。
は、ディメンションの結果の配列を探しているが、 '(N_SUBGROUPS、N_GROUPS、3)'? – Praveen