将对角矩阵存储为矢量的乘法数组

时间:2016-08-29 01:38:56

标签: python numpy

我有1D阵列A = [a,b,c ...](长度N_A)和形状的3D阵列T(N_A,N_B,N_A)。 A表示通过N_A矩阵表示对角线N_A。

我想在没有将A推广到密集存储的情况下执行A与T的收缩。特别是,我想做

np.einsum('ij, ikl', A, T)

np.einsum('ikl, lm', T, A)

是否可以在保持A稀疏的同时做这些事情?

请注意,此问题与

类似

dot product with diagonal matrix, without creating it full matrix

但不完全相同,因为我不清楚如何推广更复杂的索引模式。

1 个答案:

答案 0 :(得分:2)

np.einsum('ij, ikl', np.diag(a), t)相当于(a * t.T).T

np.einsum('ikl, lm', t, np.diag(a))相当于a * t

(通过反复试验找到)