Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:不使用循环将3x3矩阵乘以3nx1数组_Python_Arrays_Numpy - Fatal编程技术网

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

Python:不使用循环将3x3矩阵乘以3nx1数组,python,arrays,numpy,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并保存结果。然后是x{2,6,10}.T

我想用一个向量(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并保存结果。然后是x{2,6,10}.T,x{3,7,11}.T,最后是x{4,8,12}.T。数组v1、v2和v3的长度相同

提前谢谢你! 问候,


Xabi

Numpy阵列:

使用两个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矩阵:

请注意,如果使用numpy矩阵,则
*
运算符可用于矩阵乘法:

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

Numpy数组:

使用两个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矩阵:

请注意,如果使用numpy矩阵,则
*
运算符可用于矩阵乘法:

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

如果首先将所有向量叠加到一个数组中,则可以使用单个矩阵乘法执行所需的操作:

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

现在
products[:,i]
(或者
products.T[i]
,如果您愿意的话)将
A
i
-第个向量乘积。

如果您首先将所有向量叠加到一个数组中,您可以通过一个矩阵乘法来完成所需的操作:

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

现在
products[:,i]
(或者
products.T[i]
,如果你愿意的话)有了
A
i
-th向量的乘积;它还帮助我们了解你的心理工具箱中有什么,这使我们能够给你一个更有用的答案。不明白你为什么要在有或没有for循环的情况下这样做。numpy有矩阵乘法和转置的方法。你已经输入了麻木,为什么不直接使用它呢。它对C语言进行了优化,测试了代码,甚至显示了你最糟糕的尝试,也让我们有理由认为你已经尝试解决了这个问题;它还帮助我们了解你的心理工具箱中有什么,这使我们能够给你一个更有用的答案。不明白你为什么要在有或没有for循环的情况下这样做。numpy有矩阵乘法和转置的方法。你已经输入了麻木,为什么不直接使用它呢。它的C优化,测试代码正是为了这个目的。感谢您的回复!这是解决“问题”的好办法!谢谢你的回复!这是解决“问题”的好办法!