今天在写支持向量机代码时,有一个维度处理错了,导致超平面一直不正确,发现是维度错误。所以写一下numpy中维度相关内容。
shape
是一个元组(tuple),表示数组在每个维度上的大小。它描述了数组的形状,即每个维度有多少个元素。
ndim
是一个整数,表示数组的维度数量。它只告诉你数组有多少个维度,而不关心每个维度的大小。
import numpy as np
a = np.array([1, 2, 3, 4, 5])
print(a.shape, a.ndim)
输出的是:(5, )
和1
。
注意:(5, )
是一维,而(5, 1)
则是二维(或列向量)
import numpy as np
a = np.array([1, 2, 3, 4, 5])
a = a.reshape(-1, 1)
print(a)
print(a.shape, a.ndim)
输出结果:
[[1]
[2]
[3]
[4]
[5]]
(5, 1) 2
reshape(rows, cols):重塑ndarray的行数和列数(必须保证行数乘列数还是原来大小)。两个位置最多只能有一个-1,表示安装另一个非-1值进行排列,剩下
k
k
k代替-1值,即:
原来大小
=
k
×
非
−
1
值
原来大小 = k \times 非-1值
原来大小=k×非−1值
reshape(-1, 1)
可以生成列向量。
reshape(-1)
是转换为一维。
import numpy as np
a = np.array([1, 2, 3, 4, 5, 6])
a = a.reshape(2,3)
print(a)
a = a.reshape(-1, 2)
print(a)
a = a.reshape(3, -1)
print(a)
输出结果:
[[1 2 3]
[4 5 6]]
[[1 2]
[3 4]
[5 6]]
[[1 2]
[3 4]
[5 6]]
numpy中生成数组的方式中,有形如:x(a)
和x((a,b))
,前者是一维,后者是二维。例如zeros函数:
import numpy as np
a = np.zeros(3)
print(a, a.shape, a.ndim)
b = np.zeros((3,1))
print(b, b.shape, b.ndim)
输出结果:
[0. 0. 0.] (3,) 1
[[0.]
[0.]
[0.]] (3, 1) 2
**transpose()**是转置,等价于.T
:
import numpy as np
a = np.zeros(3)
a = a.reshape(-1, 1)
print(a, a.shape, a.ndim)
b = a.transpose()
print(b, b.shape, b.ndim)
c = a.T
print(c, c.shape, c.ndim)
输出结果:
[[0.]
[0.]
[0.]] (3, 1) 2
[[0. 0. 0.]] (1, 3) 2
[[0. 0. 0.]] (1, 3) 2