MATLAB与Python numpy数组/矩阵乘法

时间:2015-07-22 12:48:58

标签: arrays matlab numpy matrix dot-product

我正在翻译一些MATLAB代码,并且在理解MATLAB和numpy for Python之间的语法差异方面遇到了一些问题。

在MATLAB中,我有一个6乘6的矩阵A,以及6个浮点值a,b,c,d,e,f。 MATLAB代码

B = A*[a;b;c;d;e;f];

生成一个6乘1矩阵,B。 所以我认为MATLAB运算符'*'必须对应于numpy运算符numpy.dot()。

所以在我的Python代码中,我有相同的矩阵,A和a,b,c,d,e和f的相同值。

B = numpy.dot(A, [[a],[b],[c],[d],[e],[f]])

不生成相同的矩阵,B,也不生成

B = numpy.dot(A, [a,b,c,d,e,f])

我也尝试使用numpy的数组函数构建Python矩阵和数组,结果相同。 感觉就像我在这里混合一些基本的东西。非常感谢任何帮助。

2 个答案:

答案 0 :(得分:3)

如果不知道Aa,b,c,d,e,f中的值,就很难完全回答。但是,您的代码似乎有效:

MATLAB:

A = [1,2,3,4,5,6;
     1,2,3,4,5,6;
     1,2,3,4,5,6;
     1,2,3,4,5,6;
     1,2,3,4,5,6;
     1,2,3,4,5,6];

b = [7;8;9;10;11;12];

A*b

ans = 

  217
  217
  217
  217
  217
  217

A'*b

ans = 

   57
  114
  171
  228
  285
  342

的Python:

import numpy as np

A = np.array([[1,2,3,4,5,6],
              [1,2,3,4,5,6],
              [1,2,3,4,5,6],
              [1,2,3,4,5,6],
              [1,2,3,4,5,6],
              [1,2,3,4,5,6]])

b = np.array([7,8,9,10,11,12]).reshape(6, 1)

B = np.dot(A, b)

B
array([[217],
       [217],
       [217],
       [217],
       [217],
       [217]])

B = np.dot(A.transpose(), b)

B
array([[57],
       [114],
       [171],
       [228],
       [285],
       [342]])

numpy dot运算符会执行矩阵乘法运算,因此您初始化A时可能会出现问题,但您无法显示。

请注意,reshape操作不是必需的(无论如何都会看到相同的结果)。但是,这会产生一个列向量而不是一维数组,因此可以以与MATLAB数组[7;8;9;10;11;12]相同的方式进行转置等。

答案 1 :(得分:0)

您乘以的向量是一列,因此将其用作列以获得最终的6x1向量而不是1x6向量,因为您在MATLAB中执行6x6乘6x1的点积。

此示例适用于3x3维度(只是为了减少代码并且可以理解):

import numpy as np
A = np.array([[8,1,6],[3,5,7],[4,9,2]])  # This is the matrix
b = np.array([1,2,3])                    # These are the float numbers
c = np.dot(A,b.reshape(-1,1))            # This is a 3x1 vector

这相当于MATLAB:

magic(3)*[1;2;3]