一、矩阵
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,)