一、一维向量
1.1 它到底是行向量还是列向量?
思路:利用点乘两个向量维度进行对应的测试
- 测试1
import numpy as np
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))
[[1 1]
[1 1]
[1 1]
[1 1]]
[2 3]
(4, 2)
(2,)
[5 5 5 5]
证明已经确定,一维向量b可以作为列向量与矩阵a相乘。
- 测试2
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))
[[1 1]
[1 1]
[1 1]
[1 1]]
[2 3]
(4, 2)
(2,)
[5 5 5 5]
numpy中的一维向量既可以作为行向量,也可以作为列向量存在
二、思考
2.1 一维数组的转置
一维数组的转置仍是自己本身,这点根据上述实验的一维向量b的shape就能看出来,b.T(转置后)维度不变
它只是一个长度为2的一维向量
2.2 习惯上用二维矩阵而不是一维矩阵来表示行向量和列向量
因为二维必定能够确定他是行向量还是列向量。
b = np.array([[2,3]]) #行向量
c = np.array([[2],[3]]) #列向量
print(b)
print(c)
print(b.shape)
print(c.shape)
[[2 3]]
[[2]
[3]]
(1, 2)
(2, 1)
三、总结
3.1 一维向量
Numpy中的数组shape为(m,)说明它是一个一维数组,或者说是一个向量
3.2 系统会自动判别行列向量
但是具体是行向量还是列向量是很灵活的,再与矩阵进行矩阵乘法时,numpy会自动判断此时的一维数组应该取行向量还是列向量。
3.3 总结
所以说,无须纠结得到的一维数组是行向量还是列向量,或者说一维数组在用户看来就没有行列之分,其行列的不同在Python计算时会自动进行处理。
3.4 事实
numpy对数组的转置也可以看出来,对一维数组进行转置操作,numpy内部不会对其进行任何的操作。