带有对角矩阵的点积,没有创建完整的矩阵

时间:2016-03-22 10:50:28

标签: python numpy matrix

我想计算两个矩阵的点积,其中一个是对角矩阵。但是,我不想使用np.diagnp.diagflat来创建完整矩阵,而是使用直接填充对角线值的1D数组。我有什么方法可以用来解决这类问题吗?

x = np.arange(9).reshape(3,3)
y = np.arange(3) # diagonal elements
z = np.dot(x, np.diag(y))

我正在寻找的解决方案应该没有np.diag

z = x ??? y

2 个答案:

答案 0 :(得分:4)

将ndarray直接乘以向量将起作用。 Numpy方便地假设您想要将x的第n列乘以y的第n个元素。

{{1}}

答案 1 :(得分:0)

爱因斯坦求和是对此类问题的一种优雅解决方案:

import numpy as np

x = np.random.uniform(0,1, size=5)
w = np.random.uniform(0,1, size=(5, 3))

diagonal_x = np.diagflat(x)

z = np.dot(diagonal_x, w)

zz = np.einsum('i,ij->ij',x , w)

np.allclose(z, zz)  # Will return True

请参阅:https://docs.scipy.org/doc/numpy/reference/generated/numpy.einsum.html#numpy.einsum