对角线阵列上的numpy线性代数,没有明显的重复

时间:2017-11-17 19:14:33

标签: python numpy numpy-broadcasting

我有一个数组w(形状(3000, 100, 100))我希望与另一个数组e(形状(5, 3000))相乘,以便结果k具有形状(5, 5, 100, 100)

k[:, :, i, j] = e @ np.diag(w[:, i, j]) @ e.T

由于w太大,因此制作一些形状为super_w的{​​{1}}数组并明确填充主对角线是不切实际的。循环遍历(3000, 3000, 100, 100)i也不是非常有效。除了将j拆分成块之外,还有一种记忆效率高的方法吗?

1 个答案:

答案 0 :(得分:4)

使用np.einsum -

k = np.einsum('li,ijk,mi->lmjk',e,w,e)