关于numpy中的一维行向量、列向量的理解

许久以来都有一个疑问,numpy中的一维向量究竟是行向量还是列向量呢?

今天得空,测试一下。

思路

思路很简单,利用点乘两个向量维度要对应的特性测试。

  • 1.创建一个4*2矩阵a和一个一维numpy向量b
  • 2.使a点乘b,如果a和b的点乘np.dot(a,b)不报错,就说明一维向量b为2*1的列向量。如果报错,说明b肯定不是列向量。
  • 3.如果2不报错,将b转置,再使a点乘b,如果a和b的点乘np.dot(a,b)还不报错,就说明一维向量b既可以当做列向量也可以当做行向量。

代码测试 

思路中的第1和第2步测试代码如下:

a = np.array([[1,1,1,1],[1,1,1,1]]).T #4*2矩阵
b = np.array([2,3]) #长度为2的一维向量
print(a)
print(b)
print(a.shape)
print(b.shape)
print(np.dot(a,b))

输出:

 

很好,我们现在已经确定,一维向量b可以作为列向量与矩阵a相乘。

接着测试思路中的第3步,将b也做一下转置,看看a和b的点乘会不会出现问题,代码如下:

a = np.array([[1,1,1,1],[1,1,1,1]]).T #4*2矩阵
b = np.array([2,3]).T #长度为2的一维向量
print(a)
print(b)
print(a.shape)
print(b.shape)
print(np.dot(a,b))

输出:

 amazing,它居然也可以进行点乘,这就说明:numpy中的一维向量既可以作为行向量,也可以作为列向量存在。

结论

为了验证我的思路是否准确,我查阅了网上其他很多人的说法,和我的理解综合一下,总结下来,可以得到如下结论:

  1. 一维数组的转置仍是自己本身,这点根据上述实验的一维向量b的shape就能看出来,b.T(转置后)维度不变。
  2. 对于numpy中的一维向量b,可以认为它既不是行向量也不是列向量,它只是一个长度为2的一维向量。但是根据我的实验,我认为你也可以把他理解为它既可以做行向量同时也能做列向量,具体是行向量还是列向量根据与他进行点乘的矩阵而定。
  3. 在上述实验中可以得到一维向量既可以做行向量也可以做列向量,那对于任意一个给定的一维向量,我们就无法确定他到底是行向量还是列向量,为了防止这种尴尬的境地,习惯上用二维矩阵而不是一维矩阵来表示行向量和列向量,因为二维必定能够确定他是行向量还是列向量。

对于3,见下例:

b = np.array([[2,3]]) #行向量
c = np.array([[2],[3]]) #列向量
print(b)
print(c)
print(b.shape)
print(c.shape)

输出: 

这就是本文全部内容了,对向量在计算机中的表示形式又多了一点理解,针不搓~     (✪ω✪)

 

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小小的香辛料

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值