用Python处理数据(一)—— NumPy数组学习

优点
1.基于向量化的运算
2.数组运算时numpy数组比list效率高

(我用的是jupyter notebook)

创建一维数组:

用到的函数:
arange(x) 生成一个从0到(x-1)的包含x个元素的一维数组
用Python处理数据(一)—— NumPy数组学习

创建多维数组:

用到的函数:
array() 将输入转化为ndarray(N维数组对象(矩阵),所有元素必须是相同类型)
用Python处理数据(一)—— NumPy数组学习
或者:
用Python处理数据(一)—— NumPy数组学习
再或者用到scipy
scipy 是一种使用numpy来做高等数学、信号处理、优化、统计的扩展包
用Python处理数据(一)—— NumPy数组学习

显示数组形状

用数组的shape属性;
例如一维数组:
用Python处理数据(一)—— NumPy数组学习
二维数组:
用Python处理数据(一)—— NumPy数组学习

选择数组元素

通过a[m,n]形式选择元素(一维数组就不用说了),注意是从0开始;

用Python处理数据(一)—— NumPy数组学习

numpy数值类型

类型 说明
bool 布尔型(值为True或者False),占用1比特
inti 其长度取决于平台的整数(通常int32或者int64)
int8 字节类型(-128~127)
int16 整型(-32768~32767)
int32 整型(-2^31~2^31-1)
int64 整型(-2^63~2^63-1)
uint16 无符号整型(0~65535)
uint32 无符号整型(0~2^32-1)
uint64 无符号整型(0~2^64-1)
float16 半精度浮点型:符号占用1比特,指数占用5比特,尾数占用10比特
float32 单精度浮点型:符号占用1比特,指数占用8比特,尾数占用23比特
float64或者float 双精度浮点型:符号占用1比特,指数占用11比特,尾数占用52比特
complex64 复数类型,由两个32位浮点型(实部和虚部)表示
complex128或者complex 复数类型,由两个64位浮点数(实部和虚部)表示

用Python处理数据(一)—— NumPy数组学习

dtype属性

用Python处理数据(一)—— NumPy数组学习

一维数组的切片与索引

切片
与Python列表的切片一样:
用Python处理数据(一)—— NumPy数组学习

索引
与Python列表的索引一样:
一维数组索引
用Python处理数据(一)—— NumPy数组学习

二维数组索引
用Python处理数据(一)—— NumPy数组学习

处理数组形状

1.改为指定数组形状

(1)reshape() 函数:

reshape(n,m,p)表示将数组改为n个m乘p数组
用Python处理数据(一)—— NumPy数组学习

(2)resize()函数
resize()函数和reshape()函数类似,但是会改变所作用的数组
用Python处理数据(一)—— NumPy数组学习

(3)用元组指定数组形状
用Python处理数据(一)—— NumPy数组学习

2.将多维数组转化为一维数组

(1)拆解:ravel()函数
用Python处理数据(一)—— NumPy数组学习
ravel()函数默认降维时行序优先,但是可以给一个参数让列序优先。
用Python处理数据(一)—— NumPy数组学习
(2)拉直:flatten()函数

用Python处理数据(一)—— NumPy数组学习
flatten()函数和ravel()一样默认降维时行序优先,但是可以给一个参数让列序优先。
用Python处理数据(一)—— NumPy数组学习
ravel() 函数和 flatten() 函数的区别:
ravel()只是返回数组的视图,会改变原来的数组;flatten()函数返回的是真实的数组,需要分配新的内存空间
用Python处理数据(一)—— NumPy数组学习
用Python处理数据(一)—— NumPy数组学习

3.数组转置

(1)narray.T()函数:
用Python处理数据(一)—— NumPy数组学习
(2)transpose()函数:
用Python处理数据(一)—— NumPy数组学习

4.数组堆叠

(1)水平叠加:用元组确定ndarrays数组的形状,然后由hstack()函数来码放这些数组
用Python处理数据(一)—— NumPy数组学习
PS:用concatenate()函数也能达到同样的效果,参数axis=1
用Python处理数据(一)—— NumPy数组学习
(2)垂直叠加:先构建一个元组,然后用vstack()函数来码放
用Python处理数据(一)—— NumPy数组学习
PS:用concatenate()函数也能达到同样的效果,参数axis=0
用Python处理数据(一)—— NumPy数组学习
(3)列式堆叠:用column_stack()函数以列的方式对一维数组进行堆叠
用Python处理数据(一)—— NumPy数组学习
PS:用这种方法堆叠二维数组时,过程类似于hstack()函数
用Python处理数据(一)—— NumPy数组学习
(4)行式堆叠:用row_stack()函数以列的方式对一维数组进行堆叠
用Python处理数据(一)—— NumPy数组学习
PS:用这种方法堆叠二维数组时,过程类似于vstack()函数
用Python处理数据(一)—— NumPy数组学习
(5)深度叠加:沿着第三个坐标轴(纵向)的方向来叠加一摞数组,就像在一个数据图像的二维数组上叠加另一幅图像的数据
用Python处理数据(一)—— NumPy数组学习

5.数组的拆分

(1)横向拆分:用hsplit()函数沿着横轴方向将数组拆分(即x轴)
用Python处理数据(一)—— NumPy数组学习
PS:用split()函数也能达到同样的效果,参数axis=1
用Python处理数据(一)—— NumPy数组学习
(2)纵向拆分:用vsplit()函数沿着纵轴方向将数组拆分(即y轴)
用Python处理数据(一)—— NumPy数组学习
PS:用split()函数也能达到同样的效果,参数axis=0
用Python处理数据(一)—— NumPy数组学习
(3)深向拆分:用dsplit()函数沿着深度方向将数组拆分(即z轴)
用Python处理数据(一)—— NumPy数组学习
用Python处理数据(一)—— NumPy数组学习

6.numpy数组的一些属性

ndim属性:储存维度数量
size属性:保存元素数量
itemsize属性:返回各个元素所占字节
nbytes属性:储存整个数组所需字节数量
用Python处理数据(一)—— NumPy数组学习

7.数组的转换

转换为列表
用Python处理数据(一)—— NumPy数组学习
用astype()函数转换为指定类型
用Python处理数据(一)—— NumPy数组学习
转化为int类型时虚部会被丢掉,所以会报错。

花式索引

花式索引是在一个内部的numpy迭代器对象的基础上实现的。
下图利用花式索引将照片上的对角线置0;
用Python处理数据(一)—— NumPy数组学习