Ted*_*lik 3 python arrays numpy
我有一大组3 x 3矩阵(n比如说)和相应的3 x 1向量,并希望将每个向量乘以其相应的矩阵.如果我将矩阵堆叠成一个被调用的nx 3 x 3 并将向量转换成一个被调用的3 x ,我可以获得叠加的乘法向量,ndarrayRn ndarrayv
import numpy as np
intermediate = np.dot(R, v)
out = np.diagonal(intermediate, axis1=0, axis2=2)
Run Code Online (Sandbox Code Playgroud)
但效率非常低:np.dot生成nx 3 x n intermediate数组,然后我手动选择3 x n切片.除了通过循环n,我可以以某种方式产生3 x n数组而不制作中间nx 3 x n数组?
扩展@hpaulj提供的提示:我描述的乘法可以通过以下方式执行:
out = np.einsum('ijk,ki->ji', R, v)
Run Code Online (Sandbox Code Playgroud)
在我的问题中,接近加速的速度已经达到3个数量级(!)n = 1000:
%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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
55 次 |
| 最近记录: |