NumPy - Dot Product沿第三维而不复制

时间:2016-07-12 22:29:20

标签: python numpy vectorization

我正在尝试对一个函数进行矢量化,该函数将3分量矢量“x”和3x3“矩阵”作为输入并生成标量

def myfunc(x, matrix):
    return np.dot(x, np.dot(matrix, x))

然而,这需要被称为“n”次,并且向量x每次都具有不同的分量。我想修改这个函数,使得它输入一些3xn数组(其中的列是向量x)并生成一个向量,其组件是在每次迭代时计算的标量。

我可以写下完成这项工作的爱因斯坦求和,但它需要我构建原始3x3的3x3xn堆栈“副本”。我担心这样做会扼杀我试图做到的任何性能提升。有没有办法计算我想要的矢量而不复制3x3?

1 个答案:

答案 0 :(得分:3)

x为3xN数组,y为3x3数组。你正在寻找

z = numpy.einsum('ji,jk,ki->i', x, y, x)

你也可以构建你正在讨论的3x3xN阵列作为y的视图以避免复制,但这不是必需的。