Python数据分析与可视化——NumPy

NumPy是用于数据科学计算的基础模块,可用于存储和处理大型矩阵

NumPy提供两种基本数据对象

  1. ndarray:是存储单一数据类型的多维数组
  2. ufunc:是能够对数组进行处理的函数

NumPy数组对象:ndarray

一种存储单一数据类型的多维数组

数组属性
属性说明
ndimint 表示数组的维数
shapetuple 表示数组的尺寸,(n,m)->n行m列
sizeint返回数组元素总数,形状的乘积
dtypedata-type 描述数组中元素的类型
item-sizeint 表示每个元素的大小(字节)
创建数组

创建数组有多种形式

numpy.array()

numpy.array(object, dtype=None, copy=True, order='K', subok=False, ndim=0)

object:指定创建的数组array
dtype:指定元素类型,默认使用所需最小类型
ndmin:指定维数

import numpy as np
arr1 = np.array([1, 2, 3, 4])
arr2 = np.array([[1, 2, 3, 4], [5, 6, 7, 8]])
# arr1:
# [1,2,3,4]
# arr2:
# [[1,2,3,4],
# [5,6,7,8]]
numpy.arange()

numpy.arange(float, float, float)

指定开始值,终值,步长来创建一维数组

创建的数组不含终值,但是包含开始值

import numpy as np
arr = np.arange(0, 1, 0.1)
# [ 0.	0.1  0.2  0.3  0.4  0.5  0.6  0.7  0.8  0.9]
numpy.linspace()

numpy.linspace(float, float , int)
指定开始值,终值,元素个数来创建一维数组

创建的数组包含开始值和终值

import numpy as np
arr = np.linspace(0, 1, 9)
# [ 0.     0.125  0.25   0.375  0.5    0.625  0.75   0.875  1.   ]
numpy.logspace()

numpy.logspace(float, float, int)
指定开始值,终值,元素个数来创建一个等比一维数组
此处的参数指定的是幂,见下方实例代码

创建的数组包含开始值和终值

import numpy as np
arr = np.logspace(0, 2, 10)
# 此处指定的开始值 = 10^0 = 0
# 终值 = 10^2 = 100
# [   1.            1.66810054    2.7825594     4.64158883    7.74263683   12.91549665   21.5443469    35.93813664   59.94842503  100.        ]
numpy.zeros()

numpy.zeros(tuple)
指定形状,创建一个全部为零的数组

import numpy as np
arr = np.zeros((2, 3))
# [[ 0.  0.  0.]
# [ 0.  0.  0.]]
numpy.eye()

numpy.eye(int)
指定形状创建一个单位矩阵型数组

import numpy as np
arr = np.eye(3)
# [[ 1.  0.  0.]
# [ 0.  1.  0.]
# [ 0.  0.  1.]]
numpy.diag()

numpy.diag(array)
以传入的数组元素为对角线,其余位置以0填充

import numpy as np
arr = np.diag([1,2,3,4])
# [[1 0 0 0]
# [0 2 0 0]
# [0 0 3 0]
# [0 0 0 4]]
numpy.ones()

numpy.ones(tuple)
创建指定形状的元素全部为1的数组

import numpy as np
arr = np.ones((3,5))
# [[ 1.  1.  1.  1.  1.]
# [ 1.  1.  1.  1.  1.]
# [ 1.  1.  1.  1.  1.]]
数组数据类型

numpy扩充了原生python类型

类型描述
bool一位存储的布尔类型
inti由平台决定的整数
int8八位整数 (-128~127)
int16十六位整数(-32768~32767)
int32三十二位整数(-231~232-1)
int64六十四位整数(-263~264-1)
uint*整数对应的无符号整数(略)
float16十六位半精度浮点数
float32三十二位单精度浮点数
float(64)六十四位双精度浮点数
complex64复数,使用两个32位浮点数表示实部和虚部
complex128复数,使用两个64位浮点数表示实部和虚部

每一个数据类型都有转换函数,例如numpy.int()

生成随机数

numpy提供了生成随机数的功能,包含在random模块中

numpy.random.random()

numpy.random.random(tuple)
正常的生成指定形状的随机数数组

numpy.random.rand()

numpy.random.rand(int,int)
服从均匀分布,生成指定形状的随机数数组

numpy.random.randint()

numpy.random.randint(low, high=None, size=None, dtype='1')
low为最小值,high为最大值,size为数组的形状

通过索引访问数组
一维数组的索引

一维数组的索引相当简单,就是最常见的索引方式
可以直接定位,范围索引,设置步长等

多维数组的索引

多维数组的每一个维度都有一个索引,各个维度之间用逗号隔开,每个维度的索引可以使用一维索引的形式

这里着重讨论整数序列和布尔值索引

整数序列

通过传入一个tuple整数序列,可以索引序列中指定的下标

布尔值索引

通过传入一个bool数组,可以索引元素为true的位置所指定的下标

变换数组的形态
变换数组形状

ndarray.reshape((tuple))
使用reshape可以重新指定数组的形状,但是要求新的形状不能和原本的形状冲突,数目要吻合

ndarray.ravel()
使用ravel可以展平数组,将数组变为一维形式

ndarray.flatten()
flatten也可以展平数组,但可以选择是横向展平还是纵向展平

数组组合

numpy.hstack(ndarray, ndarray)
hstack将两个数组进行横向组合,也就是将两个数组横着直接拼接,要求两个数组行数相同

numpy.vstack(ndarray, ndarray)
vstack将两个数组进行纵向组合,将两个数组竖向拼接,要求两个数组列数相同

numpy.concatenate(axis=0)
concatenate既可以横向组合,也可以纵向组合

数组分割

numpy.hsplit(ndarray, int)
hsplit横向分割

numpy.vsplit(ndarray, int)
vsplit纵向分割

numpy.split(ndarray, int, axis=1)
split既可以横向分割,又可以纵向分割

NumPy矩阵

创建矩阵

在NumPy中,矩阵是ndarray的子类
矩阵是继承自二维数组对象

numpy.mat()
可以使用ndarray对象创建矩阵,也可以使用List创建,同时也可以使用字符串形式,例如"1,2,3; 4,5,6"创建一个两行三列矩阵

numpy.matrix()
和mat函数等价

numpy.bmat()
bmat函数用于分块创建矩阵,他传入的是字符串,字符串中指定每一块的矩阵名

import numpy as np
arr1 = np.mat("1,2,3;4,5,6")
arr2 = np.mat("7,8,9;10,11,12")
arr3 = np.bmat("arr1 arr2; arr1 arr1")
# 1 2 3 7 8 9
# 4 5 6 10 11 12
# 1 2 3 1 2 3
# 4 5 6 4 5 6

在NumPy中,对矩阵的运算是对矩阵中每一个元素的运算

矩阵的属性
属性说明
T返回自身的转置
H返回自身的共轭转置
I返回自身的逆矩阵
A返回自身的二维数组的视图

ufunc函数

ufunc函数全称为通用函数,能够对数组中的所有元素进行操作的函数

常用的函数运算
  1. 四则运算

四则运算是对矩阵中的每一个元素进行四则运算,要求两个数组形状相同

  1. 比较运算

比较运算的结果返回一个布尔数组,其中符合条件的位置为True,否则为False

  1. 逻辑运算

使用np.all()和np.any()获得一个布尔类型作为结果,其中all表示全部符合条件,any表示存在符合条件

广播机制

不同形状的数组进行算术运算时,需要定义一个运算的规则,这就是广播机制

广播机制有四个原则

  1. 让所有的输入数组向其中shape最长的数组看齐,shape不足的部分通过在前面加1补齐
  2. 输出数组的shape是输入数组shape各个轴上的最大值
  3. 如果输入数组的某个轴和输出数组的对应轴长度相同或其长度为1,则这个数组能够用来计算,否则出错
  4. 当输入数组的某个轴长度为1时,沿着此轴运算时使用此轴上的第一组值

读写文件

NumPy的文件读写主要有二进制读写和文件列表形式的数据读写两种形式

写文件
save方法

numpy.save(file, arr, allow_pickle=True, fix_imports=True)
参数file为要保存的文件的名称,需要制定文件的路径,若不指定则保存在默认路径下
参数arr时要保存的数组
文件默认扩展名.npy

savez方法

numpy.savez(file, arr...)
将多个数组保存到一个文件中,文件扩展名.npz

读文件
load方法

numpy.load(file)
既可以读取含有单个数组的文件,也可以读取含有多个数组的文件
读取多数组时默认使用的索引为arr_1 arr_2 以此类推,也可以自己指定读取索引

写入文件时可以省略扩展名,读取时不能省略

其他的文本格式
TXT格式

numpy.savetxt(fname, X, fmt=%.18e', delimiter=' ', newline='\n', header='',footer='', comments='# ')
参数fname指定文件名,参数X指定要保存的数组数据,参数delimiter指定分隔符

numpy.loadtxt(fname, delimiter=' ')
load函数将文件加载到一个二维数组中

numpy.genfromtxt(fname, delimiter=',')
此函数面向结构化数组和缺失数据,通常有三个三处
fname文件名,delimiter分隔符,names列标题

数据从第二行开始,因为默认第一行为列标题

排序

numpy的排序方式主要是直接排序和间接排序

  1. 直接排序:直接对数值进行排序
  2. 间接排序:根据一个或多个键对数据集进行排序
直接排序

ndarray.sort(axis=1)
无返回值,直接对原数组进行操作
可以设置axis参数选择对哪个轴进行排序

间接排序

ndarray.argsort()
此函数排序完成后返回一个数组,数组元素是排序后元素的原索引值,按排序结果排列

numpy.lexsort()
此函数可以同时接收多个数组组成的元组类型
(说实话这个函数的排序规则有点复杂而且让我觉得没有什么卵用所以就不看了)

去重与重复数据

去重

numpy.unique(arr)
去重函数返回去重后的结果数组

重复

numpy.tile(A, reps)
A指定要重复的数组,reps指定要重复的次数

横向重复

numpy.repeat(a, repeats, axis=None)
a是需要重复的数组元素,repeats指定重复次数,axis指定要沿哪个轴重复

统计函数

NumPy中,有许多用于统计分析的函数,几乎所有的统计函数在针对二维数组计算式都需要注意轴的概念
axis=0沿纵轴计算
axis=1沿横轴计算
默认不按照任何一轴,而是计算总值

函数作用
numpy.sum()计算数组的和
numpy.mean计算数组的均值
numpy.std()计算数组的标准差
numpy.var()计算数组的方差
numpy.min()计算数组的最小值
numpy.max()计算数组的最大值
numpy.argmin()计算数组的最小元素的索引
numpy.argmax()计算数组的最大元素的索引
numpy.cumsum()计算所有元素的累计和
numpy.cumprod()计算所有元素的累计积
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值