使用Python& Numpy,我想:
权重以规则的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
答案 0 :(得分:8)
在这种情况下,使用二维numpy.array
比numpy.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!