numpy的累积点积

时间:2019-12-26 19:09:19

标签: python numpy matrix

我有一个ndarray A,其中填充了N个平方的DxD矩阵(形状(N,D,D))。 我想将其转换为相同形状的ndarray B,其中B [0] = A [0]且对于每个i> 0,B [i] = np.dot(B [i-1],A [i ])。 尽管基本实现很明显,但我想知道此操作是否比for循环具有更快的实现。

例如,让我描述另一种执行计算的方法:

  1. B [0 ... N / 2] =计算A [0] ... A [N / 2-1]的基本方法
  2. B [N / 2 ... N] =计算A [N / 2] ... A [N]的基本方法
  3. 返回np.concatenate((B [0 ... N / 2-1],np.dot(B [N / 2-1],B [N / 2 ... N])]

重点是1和2可以并行完成,而3是矢量化操作-并且可以根据需要将此拆分进一步应用于数组的每一半。 这使我想知道是否存在比基本for循环更好的选项(例如,我的建议是否已实现/是否是实际的改进,或者是否更可取)。

非常感谢,

Yiftach

编辑:用于最基本实现的代码,用于基准测试:

import numpy as np

def cumdot(A):
    B = np.empty(A.shape)
    B[0] = A[0]
    for i in range(1, A.shape[0]):  
        B[i] = B[i - 1] @ A[i]
    return B

0 个答案:

没有答案