Python:将3x3矩阵乘以3nx1数组而不使用循环

时间:2013-08-06 08:57:39

标签: python arrays numpy

我想用矢量(3x1)进行矩阵乘法(3x3矩阵)。 “问题”是矢量的每个组成部分都是另一个矩阵,我不知道如何继续。有没有办法做到这一点?

import numpy as np
A = np.array([[1,1,1],[2,1,0],[1,0,1]])

v1 = np.array([[1,2,3,4]])
v2 = np.array([[5,6,7,8]])
v3 = np.array([[9,10,11,12]])

我想要乘以:A x {1,5,9} .T并保存结果。然后A x {2,6,10} .T,A x {3,7,11} .T,最后是A x {4,8,12} .T。数组v1,v2和v3的长度相同。

提前谢谢! 的问候,

哈维

2 个答案:

答案 0 :(得分:2)

如果您首先将所有向量堆叠到一个数组中,您可以使用单个矩阵乘法进行操作:

vectors = np.vstack((vv1, v2, v3))
products = np.dot(A, v)

现在products[:, i](或products.T[i],如果您愿意)的产品A与第i个向量相同。

答案 1 :(得分:1)

Numpy Arrays:

使用两个numpy数组;一个3 x 3和一个3x1:

>>> import numpy as np
>>> a = np.ones((3,3))
>>> b=np.random.rand(3,1)
array([[ 0.08970952],
       [ 0.56447089],
       [ 0.57500698]])

如果您想要矩阵乘法,可以使用dot

>>> np.dot(a,b)
array([[ 1.22918739],
       [ 1.22918739],
       [ 1.22918739]])

如果你想要元素明智的多元化,你可以使用*

>>> a*b
array([[ 0.08970952,  0.08970952,  0.08970952],
       [ 0.56447089,  0.56447089,  0.56447089],
       [ 0.57500698,  0.57500698,  0.57500698]])

Numpy Matrices:

请注意,如果您使用的是numpy矩阵,那么*运算符可用于矩阵乘法:

>>> c = np.mat(a)   # converts from array to matrix
>>> d = np.mat(b)
>>> c*d
matrix([[ 1.22918739],
        [ 1.22918739],
        [ 1.22918739]])