使用numpy在给定权重向量的轴上求和矩阵

时间:2016-06-30 19:04:59

标签: python numpy matrix

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进行广播来执行此操作?

2 个答案:

答案 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的形状。一旦完成乘法,你只需要沿着正确的轴求和,而鲍勃就是你的叔叔。