目录
数据的维度
一维数据:
一维数据由对等关系的有序或无序数据构成,采用线性方式组织。对应列表、数组和集合等概念。
列表和数组:一组数据的有序结构。
区别:
列表:数据类型可以不同
数组:数据类型相同
二维数据:
二维数据由多个一维数据构成,是一维数据的组合形式。
表格是典型的二维数据。其中,表头是二维数据的一部分
多维数据:
多维数据由一维或二维数据在新维度上扩展形成。例如增加时间维度的表格
高维数据:
高维数据仅利用最基本的二元关系展示数据间的复杂结构。利用键值对将数据组织起来的形成的数据关系。
数据维度的Python表示
一维数据:列表(有序)和集合(无序)类型
二维数据:列表类型
多维数据:列表类型
高维数据:字典类型或数据表示格式(JSON、XML、YAML)
Numpy的数组对象:ndarray
Numpy:开源的Python科学计算基础库,提供了一个强大的N维数组对象ndarray,广播功能函数,整合C/C++/Fortran代码的工具,线性代数、傅里叶变换、随机数生成等功能。
Numpy引用:
import numpy as np
N维数组对象:ndarray :ndarray是一个多维数组对象,由两部分构成:实际的数据、描述这些数据的元数据(数据维度、数据类型等)。ndarray数组一般要求所有元素类型相同(同质),数组下标从0开始。
如何使用ndarray:使用np.array()生成一个ndarray数组(ndarray在程序中的别名是:array),np.array()输出成 [] 形式,元素由空格分割。
In [1]: import numpy as np
In [2]: a = np.array([[0,1,2,3,4],
...: [9,8,7,6,5]])
...:
In [3]: a
Out[3]:
array([[0, 1, 2, 3, 4],
[9, 8, 7, 6, 5]])
In [4]: print(a)
[[0 1 2 3 4]
[9 8 7 6 5]]
ndarray对象的属性:
ndarray数组的创建和变换
ndarray数组的创建方法:
(1)从Pyhton中的列表、元祖等类型创建ndarray数组。
In [15]: x = np.array([0,1,2,3]) # 从列表类型创建
In [16]: print(x)
[0 1 2 3]
In [17]: x = np.array((4,5,6,7)) # 从元组类型创建
In [18]: print(x)
[4 5 6 7]
In [19]: x = np.array([[1,2],[9,8],(0.1, 0.2)]) # 从列表和元组混合类型创建
In [20]: print(x)
[[ 1. 2. ]
[ 9. 8. ]
[ 0.1 0.2]]
(2) 使用Numpy中函数创建ndarray数组,如:arange,ones,zeros等。
(3)从字节流(raw bytes)中创建ndarray数组;从文件中读取特定格式,创建ndarray数组。
ndarray数组的变换 :对于创建后的ndarray数组,可以对其进行维度变换和元素类型变换。
(1)维度变换:
In [34]: a = np.ones((2,3,4), dtype=np.int32)
In [35]: a.reshape((3,8))
Out[35]:
array([[1, 1, 1, 1, 1, 1, 1, 1],
[1, 1, 1, 1, 1, 1, 1, 1],
[1, 1, 1, 1, 1, 1, 1, 1]])
In [36]: a
Out[36]:
array([[[1, 1, 1, 1],
[1, 1, 1, 1],
[1, 1, 1, 1]],
[[1, 1, 1, 1],
[1, 1, 1, 1],
[1, 1, 1, 1]]])
In [37]: a.resize((3,8))
In [38]: a
Out[38]:
array([[1, 1, 1, 1, 1, 1, 1, 1],
[1, 1, 1, 1, 1, 1, 1, 1],
[1, 1, 1, 1, 1, 1, 1, 1]])
In [39]: a = np.ones((2,3,4), dtype=np.int32)
In [40]: a.flatten()
Out[40]:
array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1])
In [41]: a
Out[41]:
array([[[1, 1, 1, 1],
[1, 1, 1, 1],
[1, 1, 1, 1]],
[[1, 1, 1, 1],
[1, 1, 1, 1],
[1, 1, 1, 1]]])
In [42]: b = a.flatten()
In [43]: b
Out[43]:
array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1])
(2)元素类型变换: 数组向列表的转换
ls = a.tolist()
ndarray数组的操作
索引:获取数组中特定位置元素的过程。
In [54]: a = np.arange(24).reshape((2,3,4))
In [55]: a
Out[55]:
array([[[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]],
[[12, 13, 14, 15],
[16, 17, 18, 19],
[20, 21, 22, 23]]])
In [56]: a[1,2,3] # 每个维度一个索引值,逗号分割
Out[56]: 23
In [57]: a[0,1,2]
Out[57]: 6
In [58]: a[-1,-2,-3]
Out[58]: 17
切片: 获取数组元素子集的过程
In [59]: a[: , 1, -3] # 选取一个维度用
Out[59]: array([ 5, 17])
In [60]: a[: , 1:3, :] # 每个维度切片方法与一维数组相同
Out[60]:
array([[[ 4, 5, 6, 7],
[ 8, 9, 10, 11]],
[[16, 17, 18, 19],
[20, 21, 22, 23]]])
In [61]: a[: , :, ::2] # 每个维度可以使用步长跳跃切片
Out[61]:
array([[[ 0, 2],
[ 4, 6],
[ 8, 10]],
[[12, 14],
[16, 18],
[20, 22]]])
ndarray数组的运算
一元函数:
二元函数: