numpy库

numpy

一.numpy介绍

numpy 系统是Python的一种开源的数值计算扩展

​ 一个强大的N维数组对象Array

在jupyter中 shift+tab键可以显示代码提示

二.numpy里面的方法

1.n1 = np.array(list(“ABC”))

输出:array([‘A’, ‘B’, ‘C’], dtype=’<U1’)

type(n1)

输出:numpy.ndarray

np.array()和np.ndarray的区别:

np.array只是一个便捷的函数,用来创建一个ndarray,它本身不是一个类。

2.使用np的routines函数创建

包含下列常见的创建方法:

(1)np.ones(shape,dtype)

#dtype 是数的类型

例如:np.ones(shape=(10,8),dtype=int)

输出:array([[1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1]])

例如:ones=np.ones(shape=(10,8,3),dtype=float32)三维数组必须是dtype无符号字节无符号短float32.float64 .

​ plt.imshow(ones)

​ plt.show()

输出:一张白色图片,因为no.ones()生成的图片全是1,所以是白色。

(2)np.zeros(shape,dtype=float,order=“C”)

例如:np.zeros((4,4),dtype=int) #输出的值全为0

输出:array([[0, 0, 0, 0],

​ [0, 0, 0, 0],

​ [0, 0, 0, 0],

​ [0, 0, 0, 0]])

输入:zeros=np.zeros((100,80,3))

​ plt.imshow(zeros)

​ plt.show()

输出:一张黑色图片,因为np.zeros()生成的全是1,所以是黑色。

(3)np.full(shape,fill_value,dtype=None,order=“C”)

默认类型为NONE

例如: np.full((100,80,3),fill_value=1024)

输出:输出一个三位数组,里面全是1024

(4)np.eye(N,M=None,k=0,dtype=float)

例如:np.eye(N=10)

输出:10行10列,对角线上是10,其余地方为0。一元十次方程

(5)np.linspace(start,stop,num=20,endpoint=True,retstep=False,dtype=None)

例如:np.linspace(1,100,20)

输出:20个1-100之间随机数。

(6)np.arange([start,]stop,[step,]dtype=None)

例如:np.arange(0,100,2) #是左闭右开区间。

输出:0,2,4,6,8…步长为2.

例如:np.arange(0,50,50)

输出:array([0]) #格式别弄错了

(7)np.random.randint(low,high=None,size=None,dtype=“1”)

例如:np.random.randint(1,150,size=5)

输出:array([ 2, 63, 105, 77, 23])

(8)np.random.randn(d0,d1,…,dn)

#标准正态分布

例如:np.random.randn(100)

输出:array([ 0.73766702, -2.301046 , -0.33986212, 0.41131366, -1.04541039, 1.63609217, -0.56199906, 0.25369254, 0.62266544, 1.84916014, -0.72823829, -1.06921738, 0.09721531, 1.05648709, 0.63538176, 0.41672961, 1.35388874, 1.60063323, -0.01398539, -1.63526123, -0.6386015 , -1.11368491, 0.44292443, -0.91851249, -0.33917304, 1.44541374, 0.14876085, 1.27046492, -0.29261129, 0.66980054, -0.89786682, 0.68572817, -0.71707493, 0.43594588, 0.32066344, -0.27993394, 0.0223002 , -0.71197986, 0.35066279, -0.75209127, -0.52686108, -0.88614819, -1.66037492, 1.07885892, 1.56678682, -0.90406695, -0.51675617, 0.03599557, -1.24803392, -0.8590918 , -1.28739295, -0.25736902, -1.73293851, -0.99233468, 0.12317684, 1.09949733, -0.489536 , -0.89587102, 0.6737781 , -0.45619369, -0.39295191, -0.81518873, -0.39607596, 1.3162492 , 1.06984403, 0.33011018, -0.94213316, -0.50606681, -0.51282763, 0.4686461 , -0.34731743, -0.01286693, -0.84360797, 0.05332765, -0.63342548, -0.28616562, 0.55035115, 1.03183369, -3.70324474, 1.48000533, -1.77536334, 0.59999184, -2.49184904, 0.36209405, -0.71333201, 1.25570711, 0.44266304, 1.6033197 , 1.78482944, -0.2426025 , 1.33519173, -1.22701533, 0.59843578, -0.01473973, -3.00940157, 1.70474284, -0.57343002, 0.19846112, 0.14368249, -0.85744901])

(9)np.random.normal(loc=175,scale=1,size=100)

loc是生成的位置,也就是中心点位置,scale是波动幅度大小,size是生成了多少数字

例如:np.random.nomal(loc=175,scale=1,size=50)

输出:*array([ 173.53572836, 174.02473523, 174.63660148, 174.83814057, 174.46434279, 174.85109817, 173.39885932, 175.46958625, 175.81905087, 175.90248515])

(10)np.random.random(size=None)

随机生成0-1之间的数字 使用随机数生成一张图片,size可以是一个元组

例如:np.random.random(size=(200,100,3))

输出:1538357766688

3.ndarray的基本操作

(1)索引

❤一维与列表完全一致,多维同理

例如:n1=np.random.random(10) #随机生成

​ n1[4]

输出:0.56607412617412256

❤根据索引修改数据

​ 取二维数据

例如:n2=np.random.randint(1,100,(3,4))
n2

​ array([[31, 71, 6, 40],

​ [29, 3, 94, 60],

​ [50, 66, 83, 5]])

​ n2[0,1]

如果想取出71这个数值,那么这就相当于一个嵌套列表,首先看小列表在大列表的0位置,然后71在小列表的索引是1,所以要想取出来71则索引值为[0,1]

输出:71

​ 取三维数组

例如:n3=np.random.randint(1,100,(3,4,5))
n3

​ array([[[55, 12, 14, 81, 6], [65, 95, 50, 92, 38], [53, 2, 1, 96, 8], [88, 11, 2, 5, 4]], [[72, 72, 31, 32, 51], [25, 85, 72, 29, 71], [15, 34, 72, 86, 28], [15, 99, 12, 61, 66]], [[83, 75, 94, 94, 73], [ 7, 79, 31, 86, 51], [82, 89, 90, 42, 32], [ 4, 19, 35, 79, 46]]])

​ n3[1,3,4]

输出:66

(2)切片

一维和列表一致,多维同理

例如:n2=np.random.randint(0,150,10)

​ n2 #array([ 45, 102, 43, 34, 96, 40, 123, 20, 146, 37])

​ n2[0:4] #切片

输出:array([ 45, 102, 43, 34])

多维

例如:n3[0:2,1:3,2:4]#0:2是表示在大列表中选取几个中列表,1:3是在中列表中选取几个小列表,2:4同一维列表

输出:array([[[50, 92],

​ [ 1, 96]],

​ [[72, 29],

​ [72, 86]]])

(3)将数据反转

例如:n5=np.arange(0,10,2)

​ n5 #array([0, 2, 4, 6, 8])

​ n5[::-1]

输出:array([8, 6, 4, 2, 0])

(4)变形

使用 reshape函数,注意参数是一个tuple! 将原先的数值样式改变一下,但数据的数量不变

例如:n2.reshape((5,2)) #元组里面数值的选取,要求两个数字相乘为原来得数字个数

输出:array([[ 45, 102], #但本身n2的形状并没有改变,还是(10,1)

​ [ 43, 34],

​ [ 96, 40],

​ [123, 20],

​ [146, 37]])

图片进行变形

例如:zhaoliying.shape #(1105, 1108, 3)

​ zhaoliying.reshape(1105x1108x3) #zhaoliying.reshape(-1) #括号里只要是负数,都可以转换成一维ndarray的形式

输出:array([167, 180, 163, …, 238, 243, 237], dtype=uint8)

(5)级联

例如:n1=np.random.randint(1,10,(5,5))
n1

输出:array([[1, 1, 2, 1, 2],

​ [5, 9, 7, 2, 1],

​ [8, 9, 5, 1, 1],

​ [3, 8, 3, 9, 7],

	       [4, 4, 1, 4, 7]])

求n1的维度:n1.ndim

​ ❤np.concatenate()级联需要注意的点:

​ ❤级联的参数是列表:一定要加中括号或者小括号

​ ❤维度必须相同

​ ❤形状相符

​ ❤[重点]级联的方向默认是shape这个tuple的第一个值所代表的维度方向

​ ❤可通过axis参数改变级联的方向 axis所谓的维度

例如:np.concatenate((n1,n1))

输出:array([[1, 1, 2, 1, 2],

​ [5, 9, 7, 2, 1],

​ [8, 9, 5, 1, 1],

​ [3, 8, 3, 9, 7],

​ [4, 4, 1, 4, 7],

​ [1, 1, 2, 1, 2],

​ [5, 9, 7, 2, 1],

​ [8, 9, 5, 1, 1],

​ [3, 8, 3, 9, 7],

​ [4, 4, 1, 4, 7]])

级联图片

例如:zs=np.concatenate((z,z))
plt.imshow(zs)
plt.show()

输出:

1538365073514

例如:zs=np.concatenate((z,z),axis=1) axis=1的时候表示行级联
plt.imshow(zs)
plt.show()

1538365187481

❤处理自己

np.vstack:将水平的自己变成垂直的

np.hstack:将垂直的自己变成水平的

例如:n1=np.random.randint(0,10,10) #array([9, 6, 0, 0, 7, 9, 2, 7, 8, 1])

​ n2=np.vstack(n1)

​ n2

输出:array([[9],

​ [6],

​ [0],

​ [0],

​ [7],

​ [9],

​ [2],

​ [7],

​ [8],

​ [1]])

例如:n3=np.hstack(n2)
n3

输出:array([9, 6, 0, 0, 7, 9, 2, 7, 8, 1])

❤np.hstack() #有降维作用 连续使用可以把图片降维

例如:n4=np.array([[1,2,3,4,4,5]]) #array([[1,2,3,4,4,5]])
n5=n4.hstack(n4)

​ n5

输出:array([1, 2, 3, 4, 4, 5])

(6)切分

​ 与级联类似,三个函数完成切分工作“

​ ❤np.split 默认切分行 参数axis=1时,对列进行切分

​ ❤np.vsplit 竖直切 切分的是行

​ ❤np.hsplit 水平切 切分的是列

例如:n6=np.random.randint(1,150,(5,7))

​ np.split(n6,(1,3))

输出:[array([[ 21, 142, 117, 115, 136, 129, 13]]),

​ array([[ 19, 3, 41, 51, 141, 55, 58],

​ [ 87, 33, 111, 129, 112, 109, 10]]),

​ array([[127, 133, 53, 148, 135, 118, 23],

​ [ 20, 48, 148, 29, 10, 122, 69]])]

❤可以选择想要显示的部分

例如:np.split(n6,(1,3))[1]

输出:array([[ 19, 3, 41, 51, 141, 55, 58],

​ [ 87, 33, 111, 129, 112, 109, 10]])

❤对于图片也是一个道理,选择显示图片的一部分

例如:z.shape #(1105, 1108, 3)

​ z1=np.split(z,(500,900))[1]

​ plt.imshow(z1)
plt.show()

输出:在这里插入图片描述

(7)副本

所有赋值运算不会为arrary的任何元素创建副本。对赋值后的对象的操作也对原来得对象生效。

可使用copy()函数创建副本(和python中的一样)

等号赋值,是赋值的地址

copy():是另外又创建一片地址。

4.ndarray的聚合操作

❤聚合操作求最大值,n.max(),max函数里面有参数axis,相当于(4,4 ,4)==0,1,2,也就是说当axis=0时表示在三维的基础上,axis=1时在2维的基础上,axis=2时在一维的基础上,其他都一样,min,sum,mean
例如:n = np.random.randint(0,150,(4,4,4))
n
在这里插入图片描述
输出:
在这里插入图片描述
❤其他的聚合操作
np.sum np.prod np.mean np.std np.var np.min np.max np.argmin(最小值返回的位置) np.argmax(最小值返回的位置) np.median np.percentile np.any np.all np.power np.argwhere(n>50)(输出大于50数的下标)

5.ndarray的矩阵操作

❤加减乘数
在这里插入图片描述
在这里插入图片描述
❤矩阵积 np.dot(a,b)
np.dot(
❤numpy的广播机制
维度不对应自动补全
规则一:为缺少的维度补1
规则二:假定缺失元素用已有值填充

例如:
display(m,a) #说明print打印出来的是值,display打印出来的是一个ndarray对象。
array([[1. 1. 1.]
[1. 1. 1.]])
array([0,1,2])
在这里插入图片描述

6.ndarray的排序操作

小测试:使用以上所学的numpy的知识,对一个ndarray对象进行选择排序。
冒泡排序:
在这里插入图片描述
一个for循环的话,使用np.argmin或np.argmax来进行。
在这里插入图片描述
❤快速排序
np.sort():创建新空间存储排序后的数据。
ndarray.sort():在原数据上进行修改。
在这里插入图片描述
❤部分排序
np.partition(a,k)
有时候我们不是对全部数据感兴趣,我们可能只对最小或者最大的一部分感兴趣。
a是要传进去的数组
当k为正时,我们想要得到最小的K个数
当k为负时,我们想要得到最大的K个数
在这里插入图片描述

7.numpy的应用

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值