我想计算两个矩阵的点积,其中一个是对角矩阵。但是,我不想使用np.diag
或np.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
答案 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