Numpy维度知识总结
作者:一只菜得不行的鸟
1、维度究竟是行数还是列数?
机器学习时总听到m维行向量、n维列向量。究竟维度是啥?这里的维度和numpy中一样嘛?
答案:不一样。
- m维行向量:m维表示一行中有m列,由于是行向量,所以是1行m列
- n维列向量:n维表示一行中有n行,由于是列向量,所以是n行1列
- m维向量:看书的习惯了,一般书籍开头会说此本书以列向量为基准,那m维向量就指m维列向量了
- 矩阵:一般不说是几维,矩阵的表示一般就是dm。所以m维行向量也可以看作是m1的矩阵,n维列向量也可以看作是1*n的矩阵
但在numpy中维度概念不一样啊。numpy中维度就是平常所说的一维(只有x轴)、二维(x、y轴)、三维(x、y、z轴)…numpy中如何表示零维标量、一维、二维、三维等等?
标量print后只有一个数字 一维print后有一对花括号 [ ] 二维print后有两对 [ [] ] 三维print后有三对[ [ [] ] ] 依次类推…
注意,list里面也是同样规则。但list 和 ndarray背后有很大区别
import numpy as np a = 12 print("a : ", a) print("shape of a : ", np.shape(a)) #标量,0维 print("type of a : ",type(a)) print("_____________________________________") b = np.array(12) print("b : ", b) print("shape of b : ", np.shape(b)) #标量,0维 print("type of b : ",type(b)) print("_____________________________________") c = [12] print("c : ", c) print("shape of c : ", np.shape(c)) #一维向量 print("type of c : ",type(c)) print("_____________________________________") d = np.array([12]) print("d : ", d) print("shape of d : ", np.shape(d)) #一维向量 print("type of d : ",type(d)) print("_____________________________________") e = np.array([12,13]) print("e : ", e) print("shape of e : ", np.shape(e)) #一维向量 print("type of e : ",type(e)) print("_____________________________________") f = np.arange(0, 20) print("f : ", f) print("shape of f : ", np.shape(f)) #一维向量 print("type of f : ",type(f)) print("_____________________________________") g = np.array([[11],[12]]) print("g : ", g) print("shape of g : ", np.shape(g)) #二维向量 print("type of g: ",type(g))
输出:
a : 12 shape of a : () type of a : <class ‘int’>
b : 12 shape of b : () type of b : <class ‘numpy.ndarray’>
c : [12] shape of c : (1,) type of c : <class ‘list’>
d : [12] shape of d : (1,) type of d : <class ‘numpy.ndarray’>
e : [12 13] shape of e : (2,) type of e : <class ‘numpy.ndarray’>
f : [ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19] shape of f : (20,) type of f : <class ‘numpy.ndarray’>
g : [[11] [12]] shape of g : (2, 1) type of g: <class ‘numpy.ndarray’>
2、shape又是什么?
形状呗。用 .shape 属性就能查看,或者 np.shape() 函数 也行。
- () 表示零维。
- (20,) 表示1维。区别(20),(20)python里等价于20。
- (2,3) 表示2维。也就是所谓的矩阵了。线代里喜欢用 2*3 表示
- (1,2,3) 表示3维。维度从右到左依次增高。
注意:
列向量或行向量即可看作一维,又可看作二维。例如[1,1,1]: 1、(3,) 即一维 2、(1,3)即二维,1*3的矩阵
3、一维和二维初始化
常使用一维和二维,所以说一下初始化以及背后的转化。
3.1、初始化
import numpy as np import pandas # 1、np.array()初始化,传入一个list即可。 a1 = np.array(12) #0维,() a2 = np.array([12]) #1维,(1,) a3 = np.array([12,13]) #1维,(2,) a4 = np.array([[12,13], [14,15]]) #2维,(2,2) # 此函数在pandas.read_csv()导入数据集后得用 # df = pandas.read_csv('temperature_dataset.csv') # data = np.array(df) # 2、np.arange()初始化,只能初始化1维。传入start、stop、步长 b1 = np.arange(3, 7, 0.5) #1维 # 3、np.linspace()初始化,也是只能初始化1维 c1 = np.linspace(3, 7, num=5) #1维 # 4、np.zeros()初始化,传入shape。创建一个全是0的数组 d1 = np.zeros(5) #1维 print(d1) d2 = np.zeros((5,)) #1维,和上面等价 print(d2) d4 = np.zeros(2,3) #报错!!! print(d4) d3 = np.zeros((2,3)) #2维 print(d3)
3.2、常用的行向量、列向量初始化
上面已经说了,行列向量既可以看作是一维,也可以看作是二维。所以都行两个不同维度初始化都行,不用纠结。
只是按照不同维度创建后需要很清楚背后的运算。 例如np.dot() 点积运算,如果不清楚自己当初设的是一维还是二维,那很有可能报错。
我习惯用二维表示。
因为在numpy里一维既可以做行向量也可以做列向量,那对于任意一个给定的一维向量,我们就无法确定他到底是行向量还是列向量,为了防止这种尴尬的境地,习惯上用二维矩阵而不是一维矩阵来表示行向量和列向量,因为二维必定能够确定他是行向量还是列向量。
3.3、高维如何降到低维?
最常用的就是二维如何转化成一维。
- np.reshape()函数
- np.squeeze()函数
- np.flatten()函数
- np.ravel()函数
4、为啥搞清维数那么重要?
原因如下:
1、划分数据集就很重要
2、很多公式的推导对应背后的代码,常常就是由于维度不匹配报错,
3、是用matlibplot画图时本该传一维当作x、y,但误传了二维导致无法正常画图
4、就是广播操作时也需要清楚维度,否则可能因为不满足广播的维度而报错。
到此这篇关于Numpy维度知识总结的文章就介绍到这了,更多相关Numpy维度内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!