cxm272965

2020-07-13   阅读量: 1024

python 数据分析师

Numpy科学计算整理

扫码加入数据分析学习群

Numpy科学计算

与Python列表比的优缺点

Python提供了array模块,它和列表不同,能直接保存数值,但是由

于它不支持多维数组,也没有各种运算函数,因此也不适合做数值

运算

查看版本信息

import numpy as np

print(np.__version__)

数组的属性

a=np.array([1,2,3,4])#把列表转换为数组

type(a)#类型

a.shape#尺寸

shape 返回tuple,表示数组的尺寸

a.ndim#查看维度

ndim 返回int,表示数组的维数

b=a.T#一维数组不分行列

a.tolist()#转为列表

a=np.array((1,2,3,4))#把元组转换为数组

np.array(range(5))#range对象转换成数组

a.size#元素个数

size 返回int,表示数组的总元素

a.dtype#数据类型

dtype 返回data-type,描述数组中元素类型

a.itemsize#元素大小,字节

itemsize 返回int,表示数组每个元素的大小(字节为单位)

数组的创建

#数组的内置的一些方法

np.arange(8)

np.arange(0,10,2)#左闭右开

np.linspace(0,10,21)#等差数组,元素间隔(10-0)/(21-1)

np.logspace(0,100,11)#对数数组,10为底

np.logspace(1,6,6,base=2)#2为底,幂为等差数列

np.zeros(3)#全零的一维数组

np.ones(3)#全一的一维数组

a=np.ones((3,3))#全一的二维数组

np.zeros_like(a)#和a的形状一样,全零

5*np.ones_like(a)#生成全为5的数组

np.full((3,2),5)#生成全为5的数组

np.identity(3)#单位数组3*3

np.diag([1,2,3,4])#对角数组,除对角线之外的元素全为零

np.empty((6,3))#空数组,元素值不确定

np.random.randint(0,50,5)#随机整数,不包括50

np.random.rand(5)#0到1之间随机浮点数

import numpy as np

np.random.seed(5)#固定种子,随机数生成

np.random.rand(5)#0到1之间随机浮点数

查看帮助

np.random.seed?

help(np.random.seed)

np.random.standard_normal(size=(3, 4)) #二维数组,标准正态分布

np.random.normal(0.5,0.1,size=(3, 4)) #均值,标准差,shape

np.random.shuffle(a)#打乱顺序

数据类型的转换

np.float64(43)#浮点数转换

np.int32(78.0)

np.bool(0.001) = True

np.bool(0.00) = False

np.float(True) =1.0

a.astype(np.float)#转换为想要的数据类型

#缺失值,随机浮点数

a=np.nan

np.isnan(a)#对缺失值进行判断

a==np.nan#不能进行判断 = False

np.nan==np.nan#False

2*np.nan = nan

np.nan-np.nan = nan

数组元素的索引

一维数组的索引

a=np.random.randn(5)#一维数组索引

a[0] 取0位置上的

a[1:4:2]#切片 取第1,3位置上的

a[:4] 取0到3

a[3:] 取3,4

a[-1]#最后一个

a[0::2]#切片

a[4:1:-2]#反着取

多维数组的索引

1到所有行,列中的2到所有列

变换数组的形态

reshape新生成

b=a.reshape(6,2) #新生成操作,元素总数要一致

a=np.arange(198)

a.reshape(3,-1) #3行,列自动计算,198/3,要求整除

a.reshape(-1,3)#3列,行自动计算

resize原地修改

a=np.arange(12)

a=a.resize(3,4) #原地修改,返回值为空

结果不能赋值给a

flatten展平,降维

revel展平

转置(T二维,swapaxes)三维及以上

stack堆叠

concatenate拼接

split分割

数组的运算

数组与数值的运算

a*2数组中每个元素乘2

a+10数组中每个元素加2

a//2数组中每个元素整除2

a**2数组中每个元素平方

数组与数组的运算

数组的shape一样情况

a:int32,b:float64a+b各个位置上的元素相加,结果浮点型

a:int64,b:int64a*b各个位置上的元素相乘,结果int64

数组的shape不一样

一维数组的广播机制

a.shape=(3,3)

b.shape=(3,)一维部分行列

a+b,向其中shape最长的数组看齐

二维数组的广播

让所有输入数组都向其中shape最长的数组看齐, shape中不足的部

分都通过在前面加1补齐

输出数组的shape是输入数组shape的各个轴上的最大值

如果输入数组的某个轴和输出数组的对应轴的长度相同或者其长度

为1时,这个数组能够用来计算,否则出错

当输入数组的某个轴的长度为1时,沿着此轴运算时都用此轴上的第

一组值

判断能否计算:shape补齐后,两个对应轴的长度要么一致,要么为1,才能进行计算

矩阵操作

矩阵(Matrix)和数组(Array)的区别主要有以下两点:

矩阵只能为2维的,而数组可以是任意维度的

矩阵对象是ndarray的子类。因此它继承了ndarray的所有属性和方法

a=np.matrix([1,2,3]) #生成矩阵是二维

(2,3)

(3,2)

a*b #矩阵乘法,第二个矩阵的行要等于第一个矩阵的列

b=np.array([1,2,3])

a=np.array([[1,2,3],[4,5,6]]) #2x3

b=np.array([[1,2,3],[4,5,6],[4,4,4]])#3x3

np.dot(a, b) #实现的是矩阵的乘法

numpy数据的保存和读取

保存和读取

单个数组的保存和读取

a=np.arange(16).reshape(4,4)

np.save('a1',a) #保存单个数组

np.load('a1.npy')#读取单个数组

多个数组的保存和读取

a=np.arange(16).reshape(4,4)

b=np.arange(16).reshape(2,8)

np.savez('ab',a1=a,b1=b)#保存两个数组

ab=np.load('ab.npz') #读取

保存为txt格式

savetxt

保存np.savetxt(r'D:\a.txt',a)

,loadtxt

读取np.loadtxt('a.txt')

使用numpy进行统计分析

排序

一维数组的排序

a.sort() #原地排序

a.mean() #优先考虑,做了优化工作

np.sort(a) #新生成

np.mean(a)

二维数组的排序

a.sort(axis=0) #沿着0轴排序

a.sort(axis=1) #沿着1轴排序

返回排序后的索引值

a.argsort() #从小到大排序,返回其对应的索引值

a.argsort(axis=1) #沿着1轴排序

a.argsort(axis=0) #沿着0轴排序

去重复和重复

np.unique(a) #去重复

一维:array([5, 1, 2, 1, 2, 9, 1, 9, 7, 5])

np.tile(a,3) #对整个数组进行重复3次

np.repeat(a,3) #对单个元素进行重复

二维:array([[0, 1],

[2, 3]])

np.tile(a,(3,3)) #两个轴重复

np.repeat(a,3,axis=1) #沿着1轴进行重复

np.repeat(a,3,axis=0) #沿着0轴进行重复

填充

常用统计函数

sum

a.sum() #mean,max #优先考虑

np.sum(a)

np.cumsum(a)#累计和

np.cumprod(a)#累计积

a.sum(axis=0)

a.sum(axis=1)

a.mean(axis=0)

max,min

a.max(axis=0)

np.argmax(a) #最大元素的索引

a.min(axis=0)

np.argmin(a,axis=0) #最小元素的索引

a.var(axis=0) #方差

std

a.std(axis=0) #标准差

a.std()得出一个数

列表 数组 矩阵互相转换

列表》数组,列表》矩阵

L=[[1,2],[3,4]]

np.array(L)

b=np.mat(L)

数组》列表,数组》矩阵

a=np.array(L)

a.tolist()

np.mat(a)

矩阵》列表,矩阵》数组

c=np.mat(L)2*2

c.tolist()

np.array(c)

c.getA()2*2

numpy作业

创建一个 3x3 的单位数组

np.identity(3)

np.eye(3)

创建一个 3x3x3的随机数组

arr = np.random.random((2,2)) #参数是元组的形式

np.random.rand(2,2) #参数只能是数值型的

创建一个二维数组,其中边界值为1,其余值为0

arr = np.ones((10,10))

arr[1:-1,1:-1] = 0

创建一个8x8 的矩阵,并且设置成棋盘样式

arr = np.zeros((8,8),dtype=int)

arr[1::2,::2] = 1 #偶数行,所有的奇数列

arr[::2,1::2] = 1 #奇数行,所有的偶数列

考虑一个 (4,5) 形状的数组,其第6个元素的索引(x,y)是什么

np.arange(20).reshape(4,5)

np.unravel_index(6-1,(4,5))

对一个5x5的随机数组做归一化

arr = np.random.random((5,5))

arrmax, arrmin = arr.max(), arr.min()

arr = (arr - arrmin)/(arrmax - arrmin)

arr

给定一个一维数组,对其值在3到8之间的所有元素取反

案例:鸢尾花数据、醉汉漫步


添加CDA认证专家【维克多阿涛】,微信号:【cdashijiazhuang】,提供数据分析指导及CDA考试秘籍。已助千人通过CDA数字化人才认证。欢迎交流,共同成长!
34.9468 3 1 关注作者 收藏

评论(0)


暂无数据

推荐课程

推荐帖子