栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python之numpy库的应用

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python之numpy库的应用

numpy是由c语言编写的,运行速度比python 循环快很多

在数据处理的过程中,遇到使用 python for循环实现一些向量化,矩阵化操作的时候,要优先考虑用numpy

numpy数组的创建

1 从列表开始创建

x=np.array([1,1,2,3,4,5])
print(x)
print(type(x))
print(x.shape)

[1 1 2 3 4 5]

(6,)

设置数组的数据类型

x=np.array([1,1,2,3,4,5],dtype="float32")
print(x)
print(type(x[0]))

[1. 1. 2. 3. 4. 5.]

创建二维数组

x=np.array([[1,2,3],[1,2,3],[1,2,3]])
print(x)
print(x.shape)

[[1 2 3]
 [1 2 3]
 [1 2 3]]
(3, 3)
从头创建数组

很多时候我们要从无到有初始化一个数组

1 创建长度为5的数组,值都为0

np.zeros(5,dtype=int)

array([0, 0, 0, 0, 0])

2 创建一个2*4 的浮点型数组,值都为1

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

array([[1., 1., 1., 1.],
       [1., 1., 1., 1.]])

3 创建一个3*5 的数组,值都为8.8

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

array([[8.8, 8.8, 8.8, 8.8, 8.8],
       [8.8, 8.8, 8.8, 8.8, 8.8],
       [8.8, 8.8, 8.8, 8.8, 8.8]])

4 创建一个3*3 的单位矩阵

np.eye(3)

array([[1., 0., 0.],
       [0., 1., 0.],
       [0., 0., 1.]])

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

np.arange(1,15,2)


array([ 1,  3,  5,  7,  9, 11, 13])

6 创建一个4 个元素的数组,这四个数均匀的分配到0-1

np.linspace(0,1,4)

array([0.        , 0.33333333, 0.66666667, 1.        ])

7 创建一个10个元素的数组,形成1-10^9的等比数列

np.logspace(0,9,10)

array([1.e+00, 1.e+01, 1.e+02, 1.e+03, 1.e+04, 1.e+05, 1.e+06, 1.e+07,
       1.e+08, 1.e+09])

8 创建一个3*3的,在0-1之间均匀分布的随机数构成的数组

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

array([[0.33801855, 0.08572858, 0.07522315],
       [0.5341442 , 0.95755562, 0.50914591],
       [0.6047257 , 0.29996185, 0.78148356]])

9 创建一个3*3 ,均值为0,标准差为1的正态分布随机数构成的数组

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

array([[3, 5, 6],
       [6, 5, 5],
       [0, 2, 4]])

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

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

array([[3, 5, 6],
       [6, 5, 5],
       [0, 2, 4]])

11 随机重排列

x=np.array([10,20,30,40])
np.random.permutation(x)

array([20, 10, 40, 30])
数组的性质
x=np.random.randint(10,size=(3,4))
x
array([[6, 7, 7, 5],
       [9, 8, 8, 6],
       [5, 5, 8, 6]])

数组的形状 shape

x.shape
(3, 4)

数组的数据类型dtype

x.dtppe
dtype('int32')

数组的维度ndim

x.ndim
2

数组的大小size

x.size
12
数组的索引

一维数组和列表一致

多维数组—以二维数组为例:

x[0,0]
x[0][0]

x[0] [0] 相当于先取第0行,再取第0个元素

上面两种结果相等

注意:numpy数组的数据类型是固定的,向一个整形数组插入一个浮点值,浮点值会向下进行取整

数组的切片

一维数组切片和列表一样

多维数组—以二维数组为例

x[:2,:3]   #前两行,前三列

array([[6, 7, 7],
       [9, 8, 8]])
       
x[:2,0:3:2]   #前两行 前三列(每隔一列)

array([[6, 7],
       [9, 8]])
       
x[::-1,::-1]    #行列反向输出

array([[6, 8, 5, 5],
       [6, 8, 8, 9],
       [5, 7, 7, 6]])

获取数组的行和列

x[1,:]    #第一行
array([9, 8, 8, 6])
x[1]   #第一行简写

x[:,2]   #第二列,从0开始计数

注意:切片获取的是视图,而非副本

视图元素发生修改,则原数组亦也会发生相应的修改

修改切片的安全方式: copy

数组的变形
x.reshape(1,12)

array([[6, 7, 7, 5, 9, 8, 8, 6, 5, 5, 8, 6]])

reshape后面的参数大小一定要和原来的对应的上

注意:reshape返回的是视图,而非副本

多维向量转一维向量可以直接 x.flatten() 或者 x.rave() 或者 x.reshpe(-1)

flatten返回的是一个副本

ravel返回的是视图

数组的拼接

水平拼接 要求有相同的行数

x1=np.array([[1,2,3],
           [1,2,3]])
x2=np.array([[2,3,5]
           ,[6,7,8]])

x3=np.hstack([x1,x2])
x3

array([[1, 2, 3, 2, 3, 5],
       [1, 2, 3, 6, 7, 8]])

垂直方向的拼接: np.vatack() 要求有相同的列数

数组的分裂

1 split的用法

x=np.arange(10)
x
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
x1,x2,x3=np.split(x,[2,7])   #后面的列表表示要从2,7这里分
print(x1,x2,x3)

[0 1] [2 3 4 5 6] [7 8 9]

2 hsplit的用法

x=np.arange(1,26).reshape(5,5)
x
array([[ 1,  2,  3,  4,  5],
       [ 6,  7,  8,  9, 10],
       [11, 12, 13, 14, 15],
       [16, 17, 18, 19, 20],
       [21, 22, 23, 24, 25]])
       
left,mid,right=np.hsplit(x,[2,4])    #后面的列表是 对第二列和第四列进行分割
print("left:n",left)
print("mid:n",mid)
print("right:n",right)

left:
 [[ 1  2]
 [ 6  7]
 [11 12]
 [16 17]
 [21 22]]
mid:
 [[ 3  4]
 [ 8  9]
 [13 14]
 [18 19]
 [23 24]]
right:
 [[ 5]
 [10]
 [15]
 [20]
 [25]]

vsplit 的用法

vsplit与hsplit一样,只不过是对行进行分割

numpy四大运算

1 与数字的加减乘除等

x=np.arange(1,6)
print(x+2)

[3 4 5 6 7]

数组里面的所有元素都会参与运算

2 绝对值,三角函数,指数,对数

绝对值: abs()

三角函数 np.sin(),np.cos(),

指数运算: np.exp()

对数运算: np.log(x)—以2为底,np.log10(x)----以10为底

两个数组的运算是对应位置上的运算

矩阵运算

矩阵的转置 .T

x=np.arange(9).reshape(3,3)
x.T

array([[0, 3, 6],
       [1, 4, 7],
       [2, 5, 8]])

矩阵的乘法dot()

x2=x.T
x3=x2.dot(x)
x3

array([[45, 54, 63],
       [54, 66, 78],
       [63, 78, 93]])

广播运算

如果两个数组的形状在维度上不匹配

那么数组的形状会沿着维度为1的维度进行扩展以匹配另一个数组的形状

比较运算和掩码

x=np.arange(10)
x
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
x>5
array([False, False, False, False, False, False,  True,  True,  True,
        True])
x[x>5]
array([6, 7, 8, 9])
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/530171.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号