当前位置: 移动技术网 > IT编程>脚本编程>Python > Numpy中的dot运算

Numpy中的dot运算

2020年07月26日  | 移动技术网IT编程  | 我要评论

1.数组和数组之间的运算

[In] import numpy as np
	 a = np.array([1,2,3])
	 a
[Out] array([1, 2, 3])  #a为数组。
[In] b = np.array([4,5,6])
	 np.dot(a,b)
[Out] 32   #结果为标量32	

2.数组和矩阵之间的运算

[In] m = np.array([[1,2,3],[2,3,1],[0,1,-1]])
	 m
[Out] array([[ 1,  2,  3],
       		 [ 2,  3,  1],
      		 [ 0,  1, -1]])	 #m为矩阵。
[In] np.dot(a,m)    #利用a数组对m矩阵的行向量进行线性组合。
[Out] array([ 5, 11,  2]) #但是得到的是一个数组,而非一个行向量。
[In] np.dot(m,a)    #利用a数组对m矩阵的列向量进行线性组合。
[Out] array([14, 11, -1]) #但是得到的是一个数组,而非一个行向量。	

3.数组和向量之间的运算

[In] v_r = a.reshape(1,-1) #将a数组转化为行向量
	 v_r
[Out] array([[1, 2, 3]])
[In] v_r.shape	
[Out] (1, 3)
[In] np.dot(v_r,a)  #利用a数组对行向量v_r的列进行线性组合
[Out] array([14])   #结果得到一个数组
[In] np.dot(a,v_r)  #利用a数组对行向量v_r的行进行线性组合,但这样显然是错误的,因为a数组中有3个元素,但是v_r中却只有一行
[In] v_c = a.reshape(-1,1) #将a数组转化为列向量
[In] v_c
[Out] array([[1],
       	 	 [2],
       		 [3]])
[In] v_c.shape
[Out] (3, 1)
[In] np.dot(a,v_c)```#利用a数组对行向量v_c的行向量进行线性组合
[Out] array([14])
[In] np.dot(v_c,a)```#利用a数组对行向量v_c的列向量进行线性组合,但是v_c只有1列,故词句代码也会报错

从上述例子中可以看出,数组与矩阵(向量也是一个特殊的矩阵)相乘遵循左行右列的规则。数组在矩阵左边,便是对矩阵(向量)中的行向量进行线性组合;数组在矩阵右边,便是对矩阵(向量)中的列向量进行线性组合。若组合时行/列向量的个数与数组元素的个数不相等,则程序会报错。另外,数组与矩阵的dot运算,得到的结果是一个数组,而非一个向量。

4.矩阵与矩阵之间的运算

[In] m = np.array([[1,2,3],[2,3,1],[0,1,-1]])  #创建一矩阵
	 m
[Out] array([[ 1,  2,  3],
      	 	 [ 2,  3,  1],
       		 [ 0,  1, -1]])
[In] np.dot(v_r,m)
[Out] array([[ 5, 11,  2]])  #得到的是一个向量(矩阵),而非一个数组,这就是与矩阵和数组的dot之间的差别。
[In] np.dot(m,v_r)  #词条为错误语句,因为不满足矩阵相乘内标相同的规则。
[In] np.dot(m,v_c)
[Out] array([[14],
      	     [11],
      		 [-1]])
[In] np.dot(v_r,v_c)
[Out] array([[14]])
[In] np.dot(v_c,v_r)
[Out] array([[1, 2, 3],
       		 [2, 4, 6],
       		 [3, 6, 9]])

矩阵和矩阵之间的运算和线性代数中的是完全一样的,需要内标相同才能运算,最后得到的结果也是一个矩阵。

本文地址:https://blog.csdn.net/qq_38177190/article/details/107577144

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网