拍森 | numpy库

import numpy as np

一、为何用numpy?

1 numpy为何如此高效?

numpy是由c语言编写的
1 编译型语言vs解释型语言:C语言执行时,整体速度更快
2 连续单一存储vs分散多变类型存储
nunpy数组内数据类型必须是一致的
numpy数组内存储在连续内存中,python列表分散存储在内存中
3 多线程vs线程锁
python执行时,有线程锁,无法实现真正的多线程并行,c语言则可以

2 什么时候用numpy?

在数据处理过程中,需要使用python实现向量化矩阵化操作的时候,优先考虑numpy
如:两个向量相乘、矩阵乘法

二、numpy的创建

1 从列表创建

基本格式:x=np.array([列表])

设置数组类型:x=np.array([列表],dtype=“数据类型”)

二维数组的创建:x=np.array([[1,2,3],

                                                [4,5,6]])

2 从头构建数组

构建全0数组

np.zeros(5,dtype=int)  一维数组,元素为整型

np.zeros((2,2),dtype=float)  二维数组,元素为浮点型

构建2*4的浮点型数组,值为1

np.ones((2,4),dtype=float)

构建3*5的数组,值为8.8

np.full((3,5),8.8)

创建一个3*3的单位阵

np.eye(3)

创建一个序列数组,1开始到15结束,步长为2

np.arange(1,15,2)

等差数列

np.linspace(0,1,4)

等比数列

np.logspace(0,9,10)

创建3*3在(0,1)之间均匀分布的数组

np.random.random((3,3))

创建一个3*3,均值为0,标准差为1的高斯分布数组

np.random.normal(0,1,(3,3))

创建一个3*3 [0,10)之间随机整数构成的整数组

np.random.randint(0,10,(3,3))

随机重排

法一:np.random.permutation(x)--该方法不修改原列表,而是产生一个新副本

法二:np.random.shuffle(x)--该方法直接对原列表进行重排操作

随机采样

按指定形状采样:np.random.choice(x,size=(a,b))

按概率采样:np.random.choice(x,size=(a,b),p=x/sum(x))

三、numpy的性质

1 数组的属性

形状:x.shape

维度:x.nidm

大小:x.size--就是元素的个数

2 数组的索引

一维数组的索引

x[0],x[5],x[-1]---与列表的索引一样

多维数组的索引--以二维数组为例

x[1][1]或者x[1,1]都可

3 数组的切片

一维数组的切片--与列表一样

x[:3]

x[3:]

x[::-1]

多维数组的切片--以二维为例

x[:2,:3]

x[:2,0:3:2]

x[::-1,::-1]

获取数据的行和列

x[1,:]--第一行

x[:,2]--第二列

ps:数据的切片获取的是视图,而非副本,改变切片值原数据也会随之发生改变

想要只修改切片,原数据不改变的方式

x1=x[:2,:2].copy()

4 数据的变形--reshape((型状))

x.reshape((形状))

一维向量转行向量:x1=x.reshape(1,x.shape[0])      /      x1=x[np.newaxis,:]

一维向量转列向量:x1=x.reshape(x.shape[0],1)     /       x1=x[:,np.newaxis]

多维向量转一维向量

x1=x.flatten()--返回副本

x1=x.reval()--返回视图

x1=x.reshape(-1)--返回视图

5 数组的拼接

水平拼接:np.hstack([x1,x2])       np.c_[x1,x2]

垂直拼接:np.vstack([x1,x2])        np.r_[x1,x2]

返回值都是一个副本

6 数组的分裂

一维数据分裂:x1,x2,x3=np.split(x,[2,7])

行数据分裂:left,middle,right=np.hsplit(x,[2,4])

列数据分裂:up.middle,down=np.vsplit(x,[2,4])

四、Numpy的四大运算

1 向量化运算

1)与数字的加减乘除

 2)绝对值、三角函数、指数、对数

绝对值:abx(x)

三角函数:np.sin(theta)   np.cos(theta)   np.tan(theta)   np.arcsin(x)   np.arccos(x)   np.arctan(x)

指数:np.exp(x)

对数:np.log(x)   np.log2(x)   np.log10(x)

3) 两个数组的运算

 2 矩阵运算

转置:x.T

乘法:x.dot(y)   np.dot(x,y)   y.dot(x)   np.dot(y,x)

3 广播运算

规则:
如果两个数组形状在维度上不匹配
那么数组的形式会沿着维度为1的维度进行扩展以匹配另一个数组的形状

4 比较运算和掩码

1)比较运算

x>50--返回bool矩阵,满足的元素True,不满足的False

2)操作布尔数组

np.sum(x>5)  计算数据中,大于5的元素个数

np.all(x>=0)  元素是否全部大于等于0

np.any(x==6) 是否有元素等于6

np.all(x<8,axis=1) 每一行是否都小于8   axis=1按行,axis=0按列

3)将布尔数组作为掩码

x[x>5]--返回x中大于5的元素

5 花哨的索引

1)一维数组

ind=[2,6,9]

x[ind]

ind=np.array([[1,0],

                        [2,3]])

x[ind]

返回的x取值来自x的元素,形状与ind相同

2)多维数组

row=np.array([0,1,2])

col=np.([1,3,0])

x[row,col]

五、其它numpy的通用函数

1 数值排序

np.sort(x)--不改变原数组,产生新数组

x.sort()--永久性改变原数组

获取排序的索引信息

np.argsort(x)

2 最大值最小值

np.max(x)  np.max(x,axis=1)

np.min(x)

加arg是求最大值最小值的索引

np.argmax(x)

np.argmin(x)

3 数值求积、求和

np.sum(x)

按行求和:np.sum(x,axis=1)

按列求和:np.sum(x,axis=0)

np.prod(x)

np.prod(x,axis=1)

np.prod(x,axis=0)

4 中位数、均值、方差、标准差

中位数:np.median(x)

均值:np.mean(x)

方差:np.var(x)

标准差:np.std(x)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值