将列乘以矩阵向量乘以范围为(1,101)的变量项

时间:2019-03-02 17:26:01

标签: python numpy

我想乘以矩阵AB。要获得向量Y, 其中A为3x4,B为4x1 x =范围(1,101) B = [2,x,3,x] 由于B包含变量x,我们将为Y获得100个不同的向量。我想将它们添加到列表中,以便稍后可以将这些向量用于计算。

这是我尝试过的,但收到错误消息

AB= list()
for x in range (1,100):
    A = np.matrix('1 9 2 3; 7 2 1 4; 4 2 5 2') 
    B = ('2; x; 3; x')
    AB.append(A @ B)

我在做什么错? 我得到的错误是:(指的是另一个文件)

raise ValueError('malformed node or string: ' + repr(node))

2 个答案:

答案 0 :(得分:0)

好吧,首先,您忘记使B成为一个numpy矩阵,其次,您需要使用f字符串将x用作变量,而不是不兼容的字符x。

gradle

答案 1 :(得分:0)

创建数组的首选方法是:

In [146]: A = np.array([[1, 9, 2, 3],[7, 2, 1, 4],[4, 2, 5, 2]])                                                                     
In [147]: A                                                                     
Out[147]: 
array([[1, 9, 2, 3],
       [7, 2, 1, 4],
       [4, 2, 5, 2]])

对于小型数组np.matrix及其模仿的MATLAB构造函数,使用起来很方便,但通常不建议使用。

In [148]: x=3                                                                   
In [149]: B = np.array([[2],[x],[3],[x]])                                       
In [150]: B                                                                     
Out[150]: 
array([[2],
       [3],
       [3],
       [3]])
# B = np.array([[2,x,3,x]]).T
In [151]: A@B                                                                   
Out[151]: 
array([[44],
       [35],
       [35]])

对于x的多个值:

In [152]: x = np.arange(10)                                                     
In [153]: B = np.empty((4,x.shape[0]), int)                                     
In [154]: B[[1,3]] = x                                                          
In [155]: B[0] = 2                                                              
In [156]: B[2] = 3                                                              
In [157]: B                                                                     
Out[157]: 
array([[2, 2, 2, 2, 2, 2, 2, 2, 2, 2],
       [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
       [3, 3, 3, 3, 3, 3, 3, 3, 3, 3],
       [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]])
In [158]: A@B                                                                   
Out[158]: 
array([[  8,  20,  32,  44,  56,  68,  80,  92, 104, 116],
       [ 17,  23,  29,  35,  41,  47,  53,  59,  65,  71],
       [ 23,  27,  31,  35,  39,  43,  47,  51,  55,  59]])