python numpy tenforflow中维度的概念是什么呢?
怎么用python语言来表示维度呢?
我们在利用深度学习进行目标检测的过程中,经过会进行批量图片的处理,常见格式为(batchsize,size,size,channel)四维的矩阵。或者yolo3 backbone输出的矩阵(batch,feature_map_size,feature_map_size,anchor_num,(xmin,ymin,xmax,ymax,socre,class1,...,classn))等。在处理过程中,经常会涉及到对矩阵的各个维度的操作。
比如:
增加维度
减少维度
对某一维度进行取值
对不同维度直间进行比较
对不同维度求均值
等等。
例1:提取多维矩阵中特定维度的前n个"数"(此处用"数"表示感觉不太准确,一维矩阵可以说是“数”,多维矩阵应该是“向量”,如果您有更好的表述,欢迎留言讨论)
我们首先,创建一个最简单的一维矩阵
利用shape方法获取矩阵的维度,可以看到矩阵是一维的,里面有四个数字,如果我们想获取矩阵中的某些数字,可以利用python的切片功能,在python中[]可以理解为是切片的代名词。继续上面的例子,
、
关于维度在numpy中的理解,我们可以这样理解,[]中用逗号","隔开的是不同的维度,每一个维度的数据获取可以用:切片进行操作,其中[...,]三个点代表前面所有的维度,:表示去这一维度所有数,::表示取这一维度从strat到end的数,:::表示start-end-step每隔step取数。
例2:通过python中numpy.mean()函数,深度理解axis的含义
numpy.mean()传送门 numpy.mean(a, axis=None, dtype=None, out=None, keepdims=)
a:为array形的数据
axis:
科普下,axis=0表示纵轴的方向,axis=1表示横轴的方向
1)axis为二维array时:axis可为0,1两个方向轴
不填时默认为a全部元素的平均值
axis=0 表示纵轴平均,输出的是格式(1,x)的格式
axis=1表示横轴的平均,输出的是(x,1)的格式
2)axis为三维array时
axis可以为0,1,2表示三个方向轴,用tuple来表示取哪两个维度的数值作为平均,即对一个平面进行取平均
3)axis为n维array时
如果这是一个整数元组,则在多个轴上执行平均值,而不是像以前那样在单个轴或所有轴上执行。
可取n-1个轴
举例:
设a为(m,n)的array,则axis中0,1分别代表纵轴和横轴
设a为(m,n,k)的array,则axis中的0,1,2分别代表三个轴
若axis为(0,1),则相当于把m,n这两条轴压平(m,n轴上的m*n个数值求平均),输出格式为(1,k)的数值
以上情况可以类比到n维,不再举例
python数据分析基础——numpy(数据结构基础)
import numpy as np:
1、python数据分析主要的功能实现模块包含以下六个方面:
(1)numpy——数据结构基础
(2)Scipy——强大的数据计算(矩阵计算、信号处理、数理分析等)
(3)matplotlib——可视化图形功能模块,实现数据的图形可视化)
(4)pandas——基础数据分析方法
(5)scikit-learn——强大的数据分析建模库,主要用于数据挖掘
(6)Keras——人工神经网络,实现人工神经网络的数据分析应用
2、对于numpy模块,它是python里面一个开源的数据计算模块,可以实现的功能主要有:ndarray、多维数组以及线性代数相关数据分析;
3、对于numpy数据结构以及数据类型的定义举例如下:
numpy1=numpy.array(list1 dtype=numpy.float),其数据结构的类型是numpy.ndarray
4、对于数组的输入标准形式如下:
list=[[1,2,3],[1,2,4],[2,3,4],[1,3,5]]
np1=np.array(list,dtype=np.float)
其中有以下几个常见的属性:
np1.shape:数组的长宽尺寸(mxn)
np1.ndim:数据的维数,这里指的是数据列表嵌套的层数
np1.dtype:数据的类型
np1.itemsize:只要是指数据所占自己的大小
np1.size:指整个数据结构所包含的数据元素个数
len(np1)是指数据结构的真正维数,即数组的行数
5、对于输入数据数组(或者说是矩阵)的其中元素提取方法如下:
np1[a:b,c:d]
这里是指提取数组np1的第a+1行到第b行,第c+1列到第d列的数据模块,举例如下:
6、对于python随机数的生成可以用numpy模块里的random模块:
np1.random.rand(0-1之间的的随机数生成)\randn(服从正态分布的随机数生成)\randint(随机整数的生成)\choice([])(随机数产生的范围自定义)\......(其他随机数类型),举例如下:
7、矩阵数组之间的运算:+-*/(加减乘除)以及点乘
其中最为常用的点乘函数规则如下:
np.dot(矩阵1,矩阵2)
8、多维数组之间的运算(sum、max、min等)需要先对其进行数组的分层,可以用axis=0-维数-1来进行分层,具体例子如下:
9、对于矩阵之间的拼接:
(1)np.concatenate((list1,list2),axis=0):矩阵之间的拼接
(2)np.vstack((list1,list2)):矩阵之间的上下纵向追接(列数)
(3)np.hstack((list1,list2)):矩阵之间的横向拼接,所以不同矩阵的维数(行数)必须保证相同
例三:关于利用yolo3进行目标检测中用到的矩阵知识,见github,欢迎点赞。