【23】python之numpy库

一、numpy概述

numpy(Numerical Python)提供了python对多维数组对象的支持:ndarray,具有矢量运算能力,快速、节省空间。numpy支持高级大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。

基本功能:

  1. 快速高效的多维数组对象ndarray
  2. 用于对数组执行元素级计算以及直接对数组执行数学运算的函数
  3. 用于读写硬盘上基于数组的数据集的工具
  4. 线性代数运算、傅里叶变换、以及随机数生成
  5. 用户将c、c++、Fortran代码集成到Python的工具
  6. 除了为Python提供快速的数组处理能力,NumPy在数据分析方面还有另外一个主要作用,即作为在算法之间传递数据的容器

ndarray的矢量化计算:

矢量运算:相同大小的数组键间的运算应用在元素上 
矢量和标量运算:“广播”— 将标量“广播”到各个元素

二、创建ndarray数组

ndarray:N维数组对象(矩阵),所有元素必须是相同类型。 
ndarray属性:ndim属性,表示维度个数;shape属性,表示各维度大小;dtype属性,表示数据类型。

创建ndarray数组函数:

ndarray数组元素的类型

 

三、ndarray数组的索引和切片

切片就是使用数组的索引将数组切分为多个数组

一维数组的索引:与Python的列表索引功能相似

多维数组的索引:

  • arr[r1:r2, c1:c2]
  • arr[1,1] 等价 arr[1][1]
  • [:] 代表某个维度的数据
 1 import numpy as np
 2 
 3 arr = np.array([[1,2],[3,4],[5,6],[7,8]])
 4 print('获得大于等于0,小于3的元素:',arr[0:3])
 5 print('获得对应索引的数据:',arr[1,1])
 6 print('获得对应索引的数据:',arr[0:2,0:1])
 7 
 8 结果:
 9 获得大于等于0,小于3的元素: [[1 2]
10  [3 4]
11  [5 6]]
12 获得对应索引的数据: 4
13 获得对应索引的数据: [[1]
14  [3]]

布尔索引和花式索引

布尔索引:使用布尔数组作为索引。arr[condition],condition为一个条件/多个条件组成的布尔数组。

花式索引:使用整型数组作为索引。

 1 import numpy as np
 2 
 3 # 布尔索引
 4 arr = np.array([[1,2],[3,4],[5,6],[7,8]])
 5 bl_arr = np.array([True,False,True,True])
 6 print('获得对应布尔索引的数据:',arr[bl_arr,0:1])
 7 
 8 # 花式索引
 9 arr = np.array([[1,2],[3,4],[5,6],[7,8]])
10 bl_arr = np.array([1,2,1,1])
11 print('获得对应花式索引的数据:',arr[bl_arr==1,0:1])
12 
13 结果:
14 获得对应布尔索引的数据: [[1]
15  [5]
16  [7]]
17 获得对应花式索引的数据: [[1]
18  [5]
19  [7]]

 四、ndarray数组的转置和轴对换

数组的转置/轴对换只会返回源数据的一个视图,不会对源数据进行修改。

 1 import numpy as np
 2 
 3 arr = np.arange(12).reshape((3, 2, 2))
 4 print ('矩阵',arr)
 5 print ('转置矩阵',arr.T)
 6 print ('第0个和第1个坐标互换',arr.transpose((1, 0, 2)))
 7 print ('直接交换第0和第1个坐标',arr.swapaxes(0, 1))
 8 
 9 结果:
10 矩阵 [[[ 0  1]
11   [ 2  3]]
12 
13  [[ 4  5]
14   [ 6  7]]
15 
16  [[ 8  9]
17   [10 11]]]
18 转置矩阵 [[[ 0  4  8]
19   [ 2  6 10]]
20 
21  [[ 1  5  9]
22   [ 3  7 11]]]
23 第0个和第1个坐标互换 [[[ 0  1]
24   [ 4  5]
25   [ 8  9]]
26 
27  [[ 2  3]
28   [ 6  7]
29   [10 11]]]
30 直接交换第0和第1个坐标 [[[ 0  1]
31   [ 4  5]
32   [ 8  9]]
33 
34  [[ 2  3]
35   [ 6  7]
36   [10 11]]]

 

五、ndarray函数

5.1 通用函数

通用函数(ufunc)是一种对ndarray中的数据执行元素级运算的函数。

一元ufunc:

二元ufunc:

5.2 NumPy的where函数使用

np.where(condition, x, y),第一个参数为一个布尔数组,第二个参数和第三个参数可以是标量也可以是数组。

 1 import numpy as np
 2 
 3 x_arr = np.array([1.1, 1.2, 1.3, 1.4, 1.5])
 4 y_arr = np.array([2.1, 2.2, 2.3, 2.4, 2.5])
 5 cond = np.array([True, False, True, True, False])
 6 result = [(x if c else y) for x, y, c in zip(x_arr, y_arr, cond)] # 通过列表推到实现
 7 print(result)
 8 print(np.where(cond, x_arr, y_arr))
 9 
10 结果:
11 [1.1, 2.2, 1.3, 1.4, 2.5]
12 [1.1 2.2 1.3 1.4 2.5] 

六 、ndarray常用的统计方法

可以通过这些基本统计方法对整个数组/某个轴的数据进行统计计算。

用于布尔数组的统计方法:

  • sum : 统计数组/数组某一维度中的True的个数
  • any: 统计数组/数组某一维度中是否存在一个/多个True
  • all:统计数组/数组某一维度中是否都是True

使用sort对数组/数组某一维度进行就地排序(会修改数组本身)。

七、ndarray数组的去重以及集合运算

八、numpy中的线性代数

import numpy.linalg 模块。线性代数(linear algebra)

常用的numpy.linalg模块函数:

九、numpy中的随机数生成

import numpy.random模块。

常用的numpy.random模块函数:

 

posted @ 2018-08-23 14:21  才华充电中  阅读(378)  评论(0编辑  收藏  举报