我有一个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和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