矩阵乘法和阵列点之间的差异

时间:2014-10-17 03:11:24

标签: python arrays numpy matrix matrix-multiplication

我是Python新手。我在进行矩阵乘法时遇到了麻烦。我有两个清单:

      A =[3.0,3.0]    
      # 1 by 2 matrix

      B =[[ 50.33112583, -49.66887417],
           [-49.66887417,  50.33112583]]
      # 2 by 2 matrix 

      Result should be :
      # 1 by 2 matrix
      c = [1.9867549668874176, 1.986754966887446] 


      Right now I am doing:
     >> A = numpy.matrix(A)
     >> B = numpy.matrix(B)

     >> C =A * B  
     >> C
        matrix([[ 1.98675497,  1.98675497]])

     >>C.tolist()
       [[1.9867549668874176, 1.986754966887446]]

如果我做点产品,那么

    >>> B =numpy.array(B)
    >>> B
    array([[ 50.33112583, -49.66887417],
   [-49.66887417,  50.33112583]])
    >>> A = [ 3.,  3.]
    >>> A =numpy.array(A)
    >>> A
      array([ 3.,  3.])
    >>> C = numpy.dot(A,B)
    >>> C
    array([ 1.98675497,  1.98675497])
    >>> C.tolist()
    [1.9867549668874176, 1.986754966887446]

为什么我在使用矩阵乘法时得到两个括号?点积和矩阵乘法在这里是否相同?有人可以解释一下吗??

1 个答案:

答案 0 :(得分:4)

使用np.matrix()时,根据定义,它是一个2-D容器,操作必须在2-D实体之间执行,并且将返回2-D实体:

np.matrix([[1,2,3], [4,5,6]])*[[1], [2], [3]]
#matrix([[14],
#        [32]])

np.matrix([[1,2,3], [4,5,6]])*[1, 2, 3]
#ValueError

当你在两个二维数组之间np.array()使用dot()时,结果是一个二维数组;在二维数组和一维数组之间,结果是一维数组:

np.array([[1,2,3], [4,5,6]]).dot([[1], [2], [3]])
#array([[14],
#       [32]])

np.array([[1,2,3], [4,5,6]]).dot([1, 2, 3])
#array([14, 32])

当需要按元素操作时,可以使用更复杂和灵活的数组broadcasting rules。以下是每行可以乘以不同标量的方式:

np.array([[1,2,3], [4,5,6]])*[[1], [2]]
#array([[ 1,  2,  3],
#       [ 8, 10, 12]])

以及每列如何乘以不同的标量:

np.array([[1,2,3], [4,5,6]])*[1, 2, 3]
#array([[ 1,  4,  9],
#       [ 4, 10, 18]])