我有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
但不完全相同,因为我不清楚如何推广更复杂的索引模式。
答案 0 :(得分:2)
np.einsum('ij, ikl', np.diag(a), t)
相当于(a * t.T).T
。
np.einsum('ikl, lm', t, np.diag(a))
相当于a * t
。
(通过反复试验找到)