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

【Python数据分析】numpy知识总结

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

【Python数据分析】numpy知识总结

NumPy(Numerical Python) 是 Python 语言的一个扩展程序库 支持大量的维度数组与矩阵运算 此外也针对数组运算提供大量的数学函数库。

在文件中首先导入包import numpy as np

创建数组 通过list创建
a [random.uniform(100.0, 200.0) for i in range(100)]
arr np.array(a)
通过np.array()初始化创建
arr np.array([[[1, 2]], [[2, 3]], [[3, 4]], [[4, 5]]])
通过reshape创建二维数组
x np.arange(10).reshape((2, 5))
print(x)
print(x[1, 4])
print(x.shape[0])
# [[0 1 2 3 4]
# [5 6 7 8 9]]

二维数组的索引方式有两种 第一种是a[x][y]的方式 另一种是a[x,y] 通常更推荐后者。

数组array属性 shape属性

输出各个维度的大小

arr np.array([[[1, 2]], [[2, 3]], [[3, 4]], [[4, 5]]])
print(arr.shape)
# (4, 1, 2)
size属性

输出数组元素总的个数

arr np.array([[[1, 2]], [[2, 3]], [[3, 4]], [[4, 5]]])
print(arr.size)
ndim属性

数组的维度大小 也就是几维数组

arr.ndim # 3
T属性

实现数组转置

arr.T # 各个维度全部转换 (2, 1, 4)
特殊数组 np.zeros()

生成全0数组, 通过dtype可以指定数组中元素类型

z np.zeros(10)
print(z) # 默认是浮点数 [0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
z1 np.zeros(10, dtype int64 )
print(z1) # [0 0 0 0 0 0 0 0 0 0]
np.ones()

生成全1数组

one np.ones(10, dtype int64 )
print(one) # [1 1 1 1 1 1 1 1 1 1]
np.empty()

生成空数组

e np.empty(100)
print(e) # 其实是随机值
np.arange()

生成某个范围内的数组

aa np.arange(10)
# [0 1 2 3 4 5 6 7 8 9]
bb np.arange(0, 10, 3) # 指定起始点 终止点 以及 step
# [0 3 6 9]
np.eye()

生成单位矩阵

ee np.eye(10)
数组的切片操作 array和list的切片区别
a list(range(10))
b np.arange(10)
a1 a[0:4]
b1 b[0:4]
print( a_list:{} .format(a))
print( b_array:{} .format(b))
print( a1_list:{} .format(a1))
print( b1_array:{} .format(b1))
print( 修改a1[0]和b1[0]的值之后 )
a1[0] 11
b1[0] 11
print( 修改之后的a_list:{} .format(a)) # list的值并没有被修改 它相当于是一种浅拷贝
print( 修改之后的b_array:{} .format(b)) # array的值被修改
# 说明对array来说 切片操作其实是对原array的引用 实际上是一种浅拷贝
a_list:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
b_array:[0 1 2 3 4 5 6 7 8 9]
a1_list:[0, 1, 2, 3]
b1_array:[0 1 2 3]
修改a1[0]和b1[0]的值之后 
修改之后的a_list:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
修改之后的b_array:[11 1 2 3 4 5 6 7 8 9]
二维数组切片
a np.arange(15).reshape((3, 5))
print(a)
# [[ 0 1 2 3 4]
# [ 5 6 7 8 9]
# [10 11 12 13 14]]
print(a[0:2, 0:2])
# [[0 1]
# [5 6]]
print(a[0:2][0:2])
# [[0 1 2 3 4]
# [5 6 7 8 9]]
# 只有前一种方法凑效
print(a[1:, 2:4])
# [[ 7 8]
# [12 13]]
数组索引 布尔索引

将布尔表达式作为索引

a np.arange(10)
b a[a 5]
print(b)
# [6 7 8 9]

其实它的实际操作是这样的

c np.array([1, 2, 3, 4])
d [True, True, False, True]
print(c[d]) # [1, 2, 4]
print(a 5) # [False False False False False False True True True True]
print(a[a 5]) # [6 7 8 9]

取a中大于5的偶数

b a[(a 5) (a % 2 0)] # 必须要加括号 并且不能用and 此处会重载运算符 
print(b)
# [6 8]

取a中大于5的数和所有偶数

c a[(a 5) | (a % 2 0)]
print(c) # [0 2 4 6 7 8 9]
花式索引

传进去一个列表作为索引 可以取到相应位置上的值

也可以和切片操作、布尔索引结合

a np.arange(20)
print(a[[1, 3, 5, 7, 9]]) # [1 3 5 7 9]
a np.arange(20).reshape((4, 5))
print(a)
print(a[0, 2:4]) # [2, 3]
print(a[0, a[0] 1]) # [2, 3, 4]
# [[ 0 1 2 3 4]
# [ 5 6 7 8 9]
# [10 11 12 13 14]
# [15 16 17 18 19]]
# 取a中的元素作为新的二维数组
b a[[1, 3], :] # 先切第1 3行
c b[:, [1, 3]] # 再切第1 3列
print(c)
# [[ 6 8]
# [16 18]]
print(a[[1, 3], :][:, [1, 3]]) # 效果同上
print(a[[0, 2], :][:, [0, 1, 3, 4]])
numpy中的重要函数 np.isnan

nan(not a number)不是一个数 类型是 class float 。

np.nan is np.nan True
np.nan ! np.nan # 不能这样判断一个nan是否是nan
# 判断nan的方法是np.isnan(a)
a np.arange(5)
a a / a 
print(a) # [nan 1. 1. 1. 1.]
print(np.isnan(a)) # [True False False False False]
# 去掉数组中nan的方法
b a[~np.isnan(a)] # [1. 1. 1. 1.]
np.isinf

inf是无穷大 也是float型数据。用法同isnan

a np.array([1, 1, 2, 3, 4])
b np.array([0, 1, 2, 1, 0])
c a / b
print(c) # [inf 1. 1. 3. inf]
# 去除inf
print(c[~(np.isinf(c))]) # [1. 1. 3.]
np.random 随机产生一个数
a np.random.random()
产生某个范围内的整数或数组
np.random.randint(0, 10)
a np.random.randint(0, 10, 10) # 随机生成10个0-9以内的int 一维的
# [9 0 2 3 2 0 8 9 2 6]
a np.random.randint(0, 10, (2, 5)) # 最后一参数是形状 多维
# [[4 8 7 0 3]
# [7 6 8 1 8]]
产生成正态分布的数组
a np.random.uniform(2.0, 10.0, 10)
print(a)
# [3.10070825 2.54493484 8.07038208 6.74178579 2.9491971 9.9813392 3.58365099 8.4720269 4.73902394 6.50748841]
a np.random.uniform(2.0, 10.0, (2, 5))
print(a)
# [[6.86870706 8.48767828 3.35503304 2.35793278 6.05281056]
# [9.67359048 3.16650548 7.81726608 2.72933486 2.22826293]]
随机选择数组中的数形成新数组
a np.random.choice([1, 2, 3, 4, 5], 10) # 最后一个参数是生成数组的形状
print(a) # [2 2 2 2 1 1 3 5 3 3]
其它函数
print(np.maximum(a, b))
print(np.minimum(a, b))
a np.array([1, 2, 3, 4, 5])
print(a.max())
print(a.min())
print(a.mean())
print(a.argmax())
print(a.argmin())
print(a.std())
print(a.var())
a np.arange(-5, 5, 0.6)
print(a)
print(np.floor(a)) # 向上取整
print(np.ceil(a)) # 向下取整
print(np.rint(a)) # 四舍五入
print(np.round(a)) # 四舍五入
print(np.trunc(a)) # 截断小数部分
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/267846.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

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

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