我有一大组3 x 3矩阵(比如说n
)和相应的3 x 1向量,并希望将每个向量乘以其相应的矩阵。如果我将矩阵堆叠到名为n
的{{1}} x 3 x 3 ndarray
中,并将向量堆叠为称为R
的3 x n
ndarray
,我可以通过
v
但效率非常低:import numpy as np
intermediate = np.dot(R, v)
out = np.diagonal(intermediate, axis1=0, axis2=2)
会产生np.dot
x 3 x n
n
数组,然后我会手动选择3 x {{1}切片。除了循环intermediate
之外,我可以以某种方式生成3 x n
数组,而不会生成中间n
x 3 x n
数组吗?
答案 0 :(得分:5)
扩展@hpaulj提供的提示:我描述的乘法可以通过,
执行out = np.einsum('ijk,ki->ji', R, v)
我的问题中方法的加速已经是n = 1000
的3个数量级(!):
%timeit d = np.diagonal(np.dot(R, v), axis1=0, axis2=2)
10 loops, best of 3: 27.8 ms per loop
%timeit o = np.einsum('ijk,ki->ji', R, v)
10000 loops, best of 3: 21.9 µs per loop