Pet*_*ete 5 python numpy vector matrix
使用Python和Numpy,我想:
权重以规则的numpy数组nx 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
Run Code Online (Sandbox Code Playgroud)
在这种情况下使用二维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])
Run Code Online (Sandbox Code Playgroud)
*由于NumPy的广播规则,乘法运算符在这里做正确的事情.
即使是一个'技术上'正确的答案已经准备就绪,我会给出我直截了当的答案:
from numpy import array, dot
dot(array([0.5, -1]), array([[1, 2, 3], [4, 5, 6]]))
# array([-3.5 -4. -4.5])
Run Code Online (Sandbox Code Playgroud)
这一点更多的是线性代数的精神(以及问题顶部的三个点状要求).
更新: 这个解决方案非常快,而不是边缘,但比所有现成的解决方案快一些(10-15)x!