1.列表与数组
在python的基础语言部分,我们并没有介绍数组类型,但是像C、Java等语言都是有数组类型的,那python中的列表和数组有何区别呢?
一维数据:都表示一组数据的有序结构
区别:
列表:数据类型可以不同,如:【3.1413,‘pi‘,3.1404,[3.1402,2.34],‘3.2376‘】
数组:数据类型相同 。如【3.14,34.34,3433.3,343.23】
二维数据:二维数据由多个一维数据构成,是一维数据的集合形式!表格是典型的二维数据!
注意:表格的表头,可以是二维数据的一部分,也可以作为二维数据以外的一部分,这取决于用户对于二维数据的定义和使用!
多维数据:多维数据是在一维数据或者二维数据的基础上拓展形成的!
注意:上面一个是2016年的排名表格,还有一个是2017年的一个排名表格,从这两个表格的跨度来看,这里增加了一个时间维度,从而构成一个多维数据!如果随着时间的发展,那么在时间维度上,数据就会继续累积下去!
除了一维、二维、多维数据之外,还有一种多维数据!高维数据与一维、二维、多维数据不同,高维数据仅使用最基本的二元关系展示数据间的复杂结构。
如下所示:这就是一个高纬数据,这里面没有数据的规整的组织方式,但是却有数据之间的包含关系、数据之间的并列关系,以及数据之间的属性关系等形成的一个数据的组织方式,这里面都是键值对的单元,高维数据就是有键值对将数据组织起来。
2.数据维度的python表示
注意:对于一维数据我们用列表和集合表示,列表是有序的,而集合是无序的。对于python中的二维或者多维数据,我们用列表表示,而列表的元素还可以是列表,这就是一种多维列表,用多维列表来对应多维元素!
对于高维数据,我们使用字典或者数据表示的格式来表示;字典类型也是由键值对构成的一个数据类型,它与高维数据的表达方式基本上是一致的!
我们知道现在公认的数据表达格式主要有3种: JSON,XML,YAML格式,这样的格式可以用来组织数据,是他们之间形成数据的维度和关系。
3.NumPy的数组对象: ndarray
下面我们介绍一个numpy库以及numpy中的ndarray数组类型!
NumPy是一个开源的Python科学计算基础库。它也是整个python目前科学计算和数据分析的最基础的第三方库!NumPy提供了很多功能,主要包含以下一些方面:
1.一个强大的N维数组对象ndarray
2.一组广播功能函数,用来在数组之间进行计算
3.整合C/C++/Fortran等代码的工具
4.线性代数、傅里叶变换、随机数生成等功能!
NumPy是SciPy,Pandas等数据处理或科学计算库的基础。
为了更好的进行科学计算,我们首先要理解NumPy的构成原理,以及其中最关键的数据对象ndarray!
1.NumPy的引用:import numpy as np #注意:这里的np是引入模块numpy的别名,尽管别名可以省略或更改,建议使用上述约定的别名。【如果我们不使用别名,而是直接使用numpy,这样每次调用函数的时候都得是numpy.的方式,代码较长,如果我们使用的是其它别名,那么其它程序员未必熟悉,所以这里我们建议使用的别名为np】
2.python中的数据对象ndarray![有些学员可能会有疑问,在python中我们已经有了列表类型,而列表类型可以表示一维数据、二维数据、多维数据,那么我们为什么需要一个额外的数组类型呢?这里我们给大家举个例子,如下所示:]
如果用传统的python语法,我们来定义:
在上述的运算方式中,我们还是将我们的关注点放在一个一个元素之间的运算上,这并不是一种科学计算的思想方式!,而NumPy使用了另外一种思路,如下所示:
这时在NumPy进行运算的时候没有使用循环!我们的基本思想是将一维数组A和一维数组B当做两个数据,这两个数据在他们维度相同的时候,他们可以直接进行运算!程序帮我们把这两个数据中的每一个元素进行了运算,而编程的程序员只需要考虑A和B只是一个数据就可以啦!这是NumPy中N维数组对象所使用的一个基本原理!
所以对N维数组对象ndarray的一些说明如下:
1.数组对象可以去掉元素间运算所需要的循环,使一维数据更向单个数据,也使得我们程序员编写代码处理数据的程序变得十分简单!
2.通过设置专门的数组对象,经过优化,可以提升这类应用的运算速度,这里同学们可能还不知道,NumPy的底层实现是用C来完成的,也就是说在进行数组运算的时候,底层的C语言会提供非常高效和快速的运算,这样会使得在进行大规模运算的时候,运算时间会比较少!
例如:观测一个现象,每一次它的值都可能是一个整数或者浮点数,他们都是统一的!因此,数组对象采用相同的数据类型,有助于节省运算和存储空间,因为对程序来讲,当它的类型是确定的,那我可能就知道它使用的内存空间是多少,这样在内存分配和存储空间的使用上,就可以做预判,使得空间的使用很有效,所以呢,一方面是在编程上,NumPy使得程序员可以在批量数据处理时得到了简化,一方面在运算性能上,NumPy可以由底层的C语言甚至更底层的运算方法来提高他的运算速度。因此Numpy成为了Python中支持科学计算和数据处理的最基础的库。
我们来进一步介绍ndarray这个数据类型!
数组的下标是从0开始,这点是和列表一致的!我们来看一下ndarray实例,如下所示:(这里需要注意的是,在数据处理这里,我们使用的解释器是IPython,因此我么要熟悉IPython的交互时提示符,如由in、out、[]等组成,如下所示:
这里面展示了用户输入的和程序输出的结果!对于ndarray这里有两个基本的概念:
在轴上每个维度的数据存储在其中,秩表示轴的数量,也就是这个数组类型有多少个维度!这两个基本概念是描述ndarray类型的基本向量和方式!ndarray对象一共有5个基本的运算属性:
如下为ndarray实例:
注意:上面的返回值dtype(‘int32‘),其中的int32在基本的python数据类型中是不存在的,在ndarray中还有很多这样的类型,如下所示:
以上整数类型是有正负之分的,还有一部分整数是没有正负之分的,我们称之为无符号整数,如下所示:
ndarray还支持复数类型,如下所示:
我们知道在python基础数据类型部分,python只支持一种整形,一种浮点型,和一种复数类型,那为什么这里的ndarray支持这么多的类型呢?
我们说ndarray对象都是相同的,也就是一种同质的数组类型,事实上ndarray也可以包含非同质的元素。比如我们生成一个数组,如下所示:
注意:上面的x.shape只返回了行数,并没有返回列数,因为是非同质的,所以列数不固定了,而且x.dtype返回的是o,也就是说是对象类型。