Python中的各种乘:dot(),*,multiply()

Python中的各种乘:dot(),*,multiply()

  • dot()
    当dot()作用在数组类型或list类型时,两个一维数组时,结果为内积;其他为矩阵乘(即矢量积,叉乘)
In [2]:a = np.array([1,1,1])
In [3]:b = np.array([2,2,2])
In [4]:np.dot(a,b)
Out[4]: 6
In [5]:c = np.array([[3,3,3],[4,4,4]])
In [6]:d = np.array([[5],[5],[5]])
In [7]:np.dot(c,d)
Out[7]: 
array([[45],
       [60]])

当dot()作用在矩阵类型时(无论矩阵规模),两个矩阵要满足矩阵乘的行列要求,结果为矩阵乘(即矢量积,叉乘)

In [8]:e = np.mat([[3,3,3],[4,4,4]])
In [9]:f = np.mat([[5],[5],[5]])
In [10]:np.dot(e,f)
Out[10]: 
matrix([[45],
       [60]])
In [11]:g = np.mat([1,1,1])
In [12]:h = np.mat([2,2,2])
In [13]:np.dot(g,h)
Out[13]:报错

  • multiply()
    无论作用在数组类型、矩阵类型、list类型,结果都为数量积,点乘(即矩阵对应元素相乘),有广播现象
In [14]:np.multiply(a,b)
Out[14]:array([2, 2, 2])
In [15]:np.multiply(b,c)
Out[15]:
array([[6, 6, 6],
       [8, 8, 8]])

  • *
    作用在数组类型(不能作用在list类型)时为点乘
In [16]:a*b
Out[16]:array([2, 2, 2])
In [17]:[1,1,1]*[2,2,2]
Out[17]:报错
In [17]:c*d
Out[17]:报错

作用在矩阵类型时为叉乘

In [7]:e*f
Out[7]: 
matrix([[45],
       [60]])

-总结:
数据是 矩阵时dot()和*都为叉乘;数组时dot()一维是内积,二维是叉乘,*是点乘。
multiply()一直是点乘,不能作用在list上

(PS:第一次写博客,也是初学Python,不足之处请指教)

你可能感兴趣的:(Python)