[英]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
分解成块?
使用np.einsum
-
k = np.einsum('li,ijk,mi->lmjk',e,w,e)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.