numpy
是否提供了一种内置方法,可以在给定相应权重向量的情况下沿轴对矩阵求和?我的目标是将z
作为输出:
q = np.array([[1, 2, 3], [10, 20, 30]])
w = [.3, .4]
z = (q[0] * w[0]) + (q[1] * w[1])
print z
>> [ 4.3 8.6 12.9]
如果没有,是否有一种有效的方法来利用numpy
进行广播来执行此操作?
答案 0 :(得分:3)
如果您将w
转换为形状为(2, 1)
的numpy数组,则可以broadcast乘以q
行。进行重塑的一种方法是使用w
(或等效地使用np.newaxis
)索引None
:
q = np.array([[1, 2, 3], [10, 20, 30]])
w = np.array([.3, .4])
print(w[:, None] * q).sum(0)
# [ 4.3 8.6 12.9]
更快更干净的方法是使用matrix-vector multiplication执行np.dot
:
print(w.dot(q))
# [ 4.3 8.6 12.9]
答案 1 :(得分:2)
这似乎可以解决问题:
>>> np.sum(q * w[:, np.newaxis], axis=0)
array([ 4.3, 8.6, 12.9])
诀窍是要意识到为了将q
乘以w
,我们需要在w
中插入一个新轴。然后Numpy可以根据需要沿着该轴展开,以通过普通广播规则匹配q
的形状。一旦完成乘法,你只需要沿着正确的轴求和,而鲍勃就是你的叔叔。