NumPy数组是一个多维的数组对象(矩阵),称为
ndarray
,具有矢量算术运算能力和复杂的广播能力,并具有执行速度快和节省空间的特点。
一:前言
学习Pandas之前先学习numpy,为什么呢?因为numpy的格式为数组样式的,Pandas以Numpy作为基础库,基于Numpy制作的数据分析库。
二:内容
2.1 数组的创建
ndarray拥有的属性:
ndim属性
:维度个数shape属性
:维度大小dtype属性
:数据类型
通过随机抽样 (numpy.random) 生成随机数据。
1. np.array(collection)
collection 为 序列型对象(list)、嵌套序列对象(list of list)。
1 | In [4]: np.array([range(10), range(10)]) |
2. np.zeros()
指定大小的全0数组。注意:第一个参数是元组,用来指定大小,如(3, 4)。
3. np.ones()
指定大小的全1数组。注意:第一个参数是元组,用来指定大小,如(3, 4)。
4. np.empty()
初始化数组,不是总是返回全0,有时返回的是未初始的随机值(内存里的随机值)
5. np.arange()
和 reshape()
arange() 类似 python 的 range() ,创建一个一维 ndarray 数组。
reshape() 将 重新调整数组的维数。
6. random.shuffle()
random.shuffle() 将打乱数组序列(类似于洗牌)。
3. ndarray的数据类型
1. dtype
参数
指定数组的数据类型,类型名+位数,如float64, int32
2. astype
方法
转换数组的数据类型
示例代码(1、2):
1 | # 初始化3行4列数组,数据类型为float64 |
运行结果:
1 | [[ 0. 0. 0. 0.] |
2.2. ndarray的矩阵运算
2.2.1 矩阵的加减乘除
符合矩阵规则的矩阵运算
2.2.2 矩阵运算(点运算)的广播
2.2.3 矩阵的取值(索引和切片)
1. 一维数组的索引与切片
与Python的列表索引功能相似
示例代码(1):
1 | # 一维数组 |
运行结果:
1 | [0 1 2 3 4 5 6 7 8 9] |
2. 多维数组的索引与切片:
arr[r1:r2, c1:c2]
arr[1,1] 等价 arr[1][1]
[:] 代表某个维度的数据
示例代码(2):
1 | # 多维数组 |
运行结果:
1 | [[ 0 1 2 3] |
3. 条件索引
布尔值多维数组:arr[condition],condition也可以是多个条件组合。
注意,多个条件组合要使用 & | 连接,而不是Python的 and or。
示例代码(3):
1 | # 条件索引 |
运行结果:
1 | [[ 0.53514038 0.93893429 0.1087513 ] |
2.2.4 ndarray的维数转换
二维数组直接使用转换函数:transpose()
高维数组转换要指定维度编号参数 (0, 1, 2, …),注意参数是元组
示例代码:
1 | arr = np.random.rand(2,3) # 2x3 数组 |
运行结果:
1 | # 二维数组转换 |
2.3 ndarray的元素处理
2.3.1 元素计算函数
ceil()
: 向上最接近的整数,参数是 number 或 arrayfloor()
: 向下最接近的整数,参数是 number 或 arrayrint()
: 四舍五入,参数是 number 或 arrayisnan()
: 判断元素是否为 NaN(Not a Number),参数是 number 或 arraymultiply()
: 元素相乘,参数是 number 或 arraydivide()
: 元素相除,参数是 number 或 arrayabs()
:元素的绝对值,参数是 number 或 arraywhere(condition, x, y)
: 三元运算符,x if condition else y
示例代码(1、2、3、4、5、6、7):
1 | # randn() 返回具有标准正态分布的序列。 |
运行结果:
1 | # print(arr) |
2.3.2 元素统计函数
np.mean()
,np.sum()
:所有元素的平均值,所有元素的和,参数是 number 或 arraynp.max()
,np.min()
:所有元素的最大值,所有元素的最小值,参数是 number 或 arraynp.std()
,np.var()
:所有元素的标准差,所有元素的方差,参数是 number 或 arraynp.argmax()
,np.argmin()
:最大值的下标索引值,最小值的下标索引值,参数是 number 或 arraynp.cumsum()
,np.cumprod()
:返回一个一维数组,每个元素都是之前所有元素的 累加和 和 累乘积,参数是 number 或 array- 多维数组默认统计全部维度,
axis
参数可以按指定轴心统计,值为0
则按列统计,值为1
则按行统计。
示例代码:
1 | arr = np.arange(12).reshape(3,4) |
运行结果:
1 | # print(arr) |
2.3.3 元素判断函数
np.any()
: 至少有一个元素满足指定条件,返回Truenp.all()
: 所有的元素满足指定条件,返回True
示例代码:
1 | arr = np.random.randn(2,3) |
运行结果:
1 | [[ 0.05075769 -1.31919688 -1.80636984] |
2.3.4 元素去重排序函数
np.unique()
:找到唯一值并返回排序结果,类似于Python的set集合
示例代码:
1 | arr = np.array([[1, 2, 1], [2, 3, 4]]) |
运行结果:
1 | [[1 2 1] |
三:总结
大家一步步来尝试一下吧!!接下将是Pandas大餐。