对角阵列上的 numpy 线性代数,没有显式重复
numpy linear algebra on diagonal arrays without explicit duplication
我有一个数组w
(形状(3000, 100, 100)
),我想将它与另一个数组e
(形状(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
分成块之外,是否有一种节省内存的方法来执行此操作?
k = np.einsum('li,ijk,mi->lmjk',e,w,e)
我有一个数组w
(形状(3000, 100, 100)
),我想将它与另一个数组e
(形状(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
分成块之外,是否有一种节省内存的方法来执行此操作?
k = np.einsum('li,ijk,mi->lmjk',e,w,e)