矩阵乘法和数组点积之间的区别

5

我是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]

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

你有检查下面的答案吗? - Saullo G. P. Castro
1个回答

5
当你使用 np.matrix() 时,它是一个二维容器,操作必须在两个二维实体之间执行,并返回二维实体。
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

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

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])

当需要进行逐元素操作时,数组的广播规则更加复杂和灵活。可以按以下方式将每一行乘以不同的标量:

广播规则
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]])

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接