乘法运算(np.dot和*)在矩阵和数组上的简单区别----python

一、矩阵

import numpy as np
a=np.mat([1,2])
b=np.mat([4,5])
c=np.mat([[3,4],[2,3]])

a.shape                                              # (1, 2)
a*b                                                      #ValueError: shapes (1,2) and (1,2) not aligned: 2 (dim 1) != 1 (dim 0)
np.dot(a,b)                                        #ValueError: shapes (1,2) and (1,2) not aligned: 2 (dim 1) != 1 (dim 0)
a*c                                                   #matrix([[ 7, 10]])
np.dot(a,c)                                             #matrix([[ 7, 10]])
c*a                                                         #ValueError: shapes (2,2) and (1,2) not aligned: 2 (dim 1) != 1 (dim 0)
np.dot(c,a)                                         #ValueError: shapes (2,2) and (1,2) not aligned: 2 (dim 1) != 1 (dim 0)
c[0]                                                    # matrix([[3, 4]]) ,        得到的是个二维的矩阵 

矩阵的乘法运算的总结:
      对于np.dot来说,
       1.运算符号*和np.dot的结果一样,即矩阵乘法.不满足shape的要求,则报错。
       2.在一维矩阵中,shape=(1,n)
     

二、数组
x=np.array([1,2])
y=np.array([4,5])
z=np.array([[3,4],[2,3]])

x.shape                                                                              # (2,)

x*y                                                                                      #array([ 4, 10])
np.dot(x,y)                                                                          #14
x*z                                                                                     #array([[3, 8],[2, 6]])
np.dot(x,z)                                                                          # array([ 7, 10]),得到的是一维的数组 
z*x                                                                                     #array([[3, 8],[2, 6]])
np.dot(z,x)                                                                          #array([11,  8])  ,得到的是一维的数组
z[0]                                                                                       # array([3, 4])    ,得到的是一维的数组
数组的乘法运算的总结:

对于np.array来说,
  1、(1)对于运算符号*来说:

                 *代表对应的元素相乘。如果两者的shape不匹配,则进行广播后,再进行对应元素的相乘运算。
         (2)对于运算符号np.dot来说:

                  对于两个np.array,如果它们的维度均为二维的,np.dot即是矩阵乘法运算,只不过得到的是二维的数组,而非矩阵;.                   对于两个np.array,如果其中有一个np.array为一维,或者两个np.array均为一维的,则进行np.dot运算时,如果一维数组放在前面,则该一维数组按行放置进行运算,如果一维数组放在后面,则该一维数组按列放置进行运算,但是最终的运算结果都是得到一维的数组。
  2.在一维数组中,shape=(n,)

你可能感兴趣的:(np.dot,矩阵,数组,乘法运算,python)