矩阵的Numpy-weight和sum行

时间:2011-02-21 17:52:17

标签: python vector matrix numpy

使用Python& Numpy,我想:

  • 考虑每一行(n列x m行)矩阵作为向量
  • 每行的重量(标量 乘以每个组成部分 矢量)
  • 添加每一行以创建最终向量 (矢量添加)。

权重以规则的numpy数组给出,n x 1,因此矩阵中的每个向量m应乘以权重n。

这就是我所拥有的(测试数据;实际矩阵很大),这可能是非Numpy和非Pythonic。谁能做得更好?谢谢!

import numpy

# test data
mvec1 = numpy.array([1,2,3])
mvec2 = numpy.array([4,5,6])
start_matrix = numpy.matrix([mvec1,mvec2])
weights = numpy.array([0.5,-1])

#computation
wmatrix = [ weights[n]*start_matrix[n] for n in range(len(weights)) ]

vector_answer = [0,0,0]
for x in wmatrix: vector_answer+=x

2 个答案:

答案 0 :(得分:8)

在这种情况下,使用二维numpy.arraynumpy.matrix更方便。

start_matrix = numpy.array([[1,2,3],[4,5,6]])
weights = numpy.array([0.5,-1])
final_vector = (start_matrix.T * weights).sum(axis=1)
# array([-3.5, -4. , -4.5])

由于NumPy的广播规则,乘法运算符*在这里做了正确的事。

答案 1 :(得分:8)

即使一个'技术上'正确的答案已经准备就绪,我会给出我直截了当的回答:

from numpy import array, dot
dot(array([0.5, -1]), array([[1, 2, 3], [4, 5, 6]]))
# array([-3.5 -4. -4.5])

这一点更多的是线性代数的精神(以及问题顶部的三个点缀要求)。

<强>更新 而且这个解决方案非常快,不是很简单,但比所有现成的解决方案快一些(10-15)x!