我有一个数组 w
(shape (3000, 100, 100)
) 我想将它与另一个数组 e
(shape (5, 3000)
) 使得结果 k
的形状为 (5, 5, 100, 100)
和
k[:, :, i, j] = e @ np.diag(w[:, i, j]) @ e.T
因为 w
太大了,制作一些形状为 (3000, 3000, 100, 100)
的 super_w
数组是不切实际的,并且显式填充主对角线。遍历 i
和 j
的效率也不是很高。除了将 w
分成 block 之外,是否有一种节省内存的方法来执行此操作?
最佳答案
与 np.einsum
-
k = np.einsum('li,ijk,mi->lmjk',e,w,e)
关于python - 对角阵列上的 numpy 线性代数,没有显式重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47357744/