Python/Cython/Numpy を使用して多くの 4x4 行列を非常に迅速に乗算する方法を探しています。
私の現在の試みを示すために、計算する必要があるアルゴリズムがあります
A_1 * A_2 * A_3 * ... * A_N
どこでも
A_i != A_j
Python での例:
means = array([0.0, 0.0, 34.28, 0.0, 0.0, 3.4])
stds = array([ 4.839339, 4.839339, 4.092728, 0.141421, 0.141421, 0.141421])
def fn():
steps = means+stds*numpy.random.normal(size=(60,6))
A = identity(4)
for step in steps:
A = dot(A, transform_step_to_4by4(step))
%timeit fn()
1000 loops, best of 3: 570 us per loop
Cython/Numpy でこのアルゴリズムを実装すると、Eigen/C++ をすべて最適化して使用した同等のコードよりも約 100 倍遅くなります。しかし、私は本当にC++を使いたくありません。