Numpy中的dot运算
程序员文章站
2022-04-18 09:30:04
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 #结果为标量322.数组和矩阵之间的运算[In] m = np.array([[1,2,3],[2,3,1],[0,1,-1]]) m[Out] array([[ 1, 2, 3],...
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
上一篇: textarea自适应内容高度