Python数据分析--科学计算工具Numpy通用函数(持续更新中)

前面我们讲了科学计算工具Numpy的基础数据结构,不知道看过的小伙伴学习的咋样,今天呢我们继续上一节的内容讲一下Numpy的通用函数,如果有小伙伴以后想要做数据分析和数据可视化,Numpy这部分还是非常重要的,有必要好好学一下,其实学习本来就是一个很枯燥的过程,我开始学习的时候也是断断续续的,最终坚持下来的原因是自己第一次参加学校组织的数学建模时做数据分析的时候感觉自己用的方法太笨速度太慢了,拖了整个队伍的后腿,所以从第一次参加数学建模之后我就每天都坚持学习了,现在因为疫情的原因在家没事干,所以把自己的学习过程写到这里,一方面呢是想给自己留下一些记录性的东西,另一方面还是有一点点私心的,希望能收割一小批跟我一样喜欢数据分析数据可视化的同学做粉丝,哈哈O(∩_∩)O哈哈~扯远了扯远了,我们还是继续今天的学习吧
Numpy通用函数非常多,限于篇幅原因,在这里我们只讲一些基础函数。
(1)数组形状—.T/.reshape()/.resize()
首先来看数组转置函数----.T,如果原数组的形状是52,则转置后数组形状为25,这个我们在线性代数里面都学过,O(∩_∩)O哈哈~,这里要注意一维数组转置后仍然是一维数组哦

import numpy as np #导入numpy包并命名为np
ar1 = np.arange(10)#arange()生成一维数组,元素值为0-9
ar2 = np.ones((5,2))#ones()生成5*2数组,元素值均为1
print(ar1,'\n',ar1.T)#输出ar1和ar1转置后的数组,.T函数为数组转置
print(ar2,'\n',ar2.T)#输出ar1和ar1转置后的数组,.T函数为数组转置
print('------')

输出结果:
在这里插入图片描述
再来看一个比较霸气的函数reshape(),为什么说它霸气呢,因为它直接就把原数组的形状改变了,毫无商量可言,来看代码~

ar1 = np.arange(10)
ar3 = ar1.reshape(2,5)     # 用法1:直接将已有数组改变形状,要注意改变形状后元素总个数是不能变的             
ar4 = np.zeros((4,6)).reshape(3,8)   # 用法2:生成数组后直接改变形状
ar5 = np.reshape(np.arange(12),(3,4))   # 用法3:参数内添加数组,目标形状
print(ar1,'\n',ar3)
print(ar4)
print(ar5)

输出结果:
在这里插入图片描述
效果还是非常的显著霸气滴
再来看一个更厉害的函数resize(),上面的reshape()函数呢虽然可以改变数组形状,但是改变前后数组的元素个数还是不能随便变化的,resize()函数就不一样了,我不管你原来数组有几个元素,我要你有几个你就要有几个,听起来是不是有一点霸气总裁范儿O(∩_∩)O哈哈~

ar6 = np.resize(np.arange(5),(3,4))#本来生成的数组是5个元素,新数组需要12个元素,会自动重复填充所需要元素
ar7=np.resize(np.arange(12),(2,2))#本来生成数组是12个元素,新数组需要4个元素,会自动删掉多余元素
print(ar6)
print(ar7)

输出结果:
在这里插入图片描述
这里要注意.T/.reshape()/.resize()这三个函数都是生成新的数组,原数组不会改变。
(2)数组的复制
讲完数组的形状我们再来看一下数组的复制,这里跟我们之前讲的元素复制方法是一样的,一种是直接复制,另一种通过copy()函数

ar1 = np.arange(10)#创建数组ar1
ar2 = ar1#直接复制,ar2=ar1
print(ar2 is ar1)#判断ar2是否与ar1是相同数组
print(ar1,ar2)#输出ar1和ar2
ar1[2] = 9#改变ar1数组的值
print(ar1,ar2)#再次输出两个数组

输出结果:
在这里插入图片描述
观察输出结果,我们可以看到,print(ar2 is ar1)的值是True,也就是说这种复制方法导致ar2和ar1是相同的元素,回忆Python的赋值逻辑,两个数组指向内存中的同一个值,所以ar2会随着ar1的改变而改变,因此,ar1改变之后,ar2的输出结果与ar1是一样的。

ar3 = ar1.copy()#通过copy()函数复制
print(ar3 is ar1)#判断ar3是否与ar1是相同数组
print(ar1,ar3)#输出ar1和ar3
ar1[0] = 9#改变ar1数组的值
print(ar1,ar3)#再次输出ar1和ar3

输出结果:
在这里插入图片描述
通过输出结果可以看出,ar1与ar3并不是相同数组,ar1改变之后ar3并不会主动随ar1改变,这跟我们之前讲的元素的复制也是一样的,copy()方法只是生成数组及其数据的完整拷贝,与原数组并不指向内存中同一个值。所以以后大家在编程过程中一定要注意这两种复制方法的使用。
(3)数组类型转换–.astype()
astype()函数即改变数组的数据类型,平时用的不是很多,还是要知道是有这样的函数的

ar1 = np.arange(10,dtype=float)#生成float型数组
print(ar1,ar1.dtype)
print('-----')
# 可以在参数位置设置数组类型

ar2 = ar1.astype(np.int32)#直接将数组类型转为int32型,注意:养成好习惯,数组类型用np.int32,而不是直接int32
print(ar2,ar2.dtype)
print(ar1,ar1.dtype)
# a.astype():转换数组类型

输出结果:
在这里插入图片描述
(3)数组堆叠
数组堆叠呢就是把两个数据简单的放在一起,分为水平堆叠hstack(),竖直堆叠vstack()和整体堆叠stack(),我们来一一看一下
先来看水平堆叠hstack()

a = np.arange(5)    # a为一维数组,5个元素
b = np.arange(5,9) # b为一维数组,4个元素
ar1 = np.hstack((a,b))  # 堆叠形成新数组
print(a,a.shape)#输出数组a及形状
print(b,b.shape)#输出数组b及形状
print(ar1,ar1.shape)#输出新数组ar1及形状
a = np.array([[1],[2],[3]])   # a为二维数组,3行1列
b = np.array([['a'],['b'],['c']])  # b为二维数组,3行1列
ar2 = np.hstack((a,b))  # 二维数组的堆叠
print(a,a.shape)
print(b,b.shape)
print(ar2,ar2.shape)
print('-----')

输出结果:
在这里插入图片描述
这里使用的时候要注意,对于两个一维数组而言,堆叠时数组的元素个数可以不一样,而对于二维数组而言,堆叠时数组的形状必须要一样!!!

a = np.arange(5) #生成一维数组   
b = np.arange(5,10)#生成一维数组
ar1 = np.vstack((a,b))#竖直堆叠
print(a,a.shape)
print(b,b.shape)
print(ar1,ar1.shape)
a = np.array([[1],[2],[3]])   #创建1*3的二维数组
b = np.array([['a'],['b'],['c'],['d']])   #创建1*4的二维数组
ar2 = np.vstack((a,b))  # 这里形状可以不一样
print(a,a.shape)
print(b,b.shape)
print(ar2,ar2.shape)
print('-----')

输出结果:
在这里插入图片描述
竖向堆叠和横向堆叠差不多,这里就不赘述了,要注意两个二维数组竖向堆叠时,列数要保持一致

a = np.arange(5)    #生成一维数组
b = np.arange(5,10)#生成一维数组
ar1 = np.stack((a,b))#
ar2 = np.stack((a,b),axis = 1)
print(a,a.shape)
print(b,b.shape)
print(ar1,ar1.shape)
print(ar2,ar2.shape)

输出结果:
在这里插入图片描述
stack()的使用方法是stack(arrays,axis),axis默认为0,为0的时候沿着新轴连接数组的序列,两个数组的形状必须一样!说起来比较抽象,大家直接看例子
假设有两个数组[1 2 3]和[4 5 6],shape均为(3,0),
当axis=0,新生成的数组为[[1 2 3] [4 5 6]],shape为(2,3)
当axis=1,新生成的数组为[[1 4] [2 5] [3 6]],shape为(3,2)
(4)数组拆分
学了数组堆叠,再来看数组拆分,也分为横向拆分hsplit()和纵向拆分vsplit(),先来看横向拆分hsplit(),按列拆分

ar = np.arange(16).reshape(4,4)
ar1 = np.hsplit(ar,2)#拆分为两个数组
print(ar)
print(ar1,type(ar1))

输出结果:
在这里插入图片描述
再来看纵向拆分,按行拆分

ar2 = np.vsplit(ar,4)
print(ar2,type(ar2))

拆分结果:
在这里插入图片描述
(5)数组简单运算
学了上面基本的东西,我们再来看数组的简单运算,用的仍然是以前的基本计算函数

# 与标量的运算
ar = np.arange(6).reshape(2,3)
print(ar + 10)   # 加法
print(ar * 2)   # 乘法
print(1 / (ar+1))  # 除法
print(ar ** 0.5)  # 幂

print(ar.mean())  # 求平均值
print(ar.max())  # 求最大值
print(ar.min())  # 求最小值
print(ar.std())  # 求标准差
print(ar.var())  # 求方差
print(ar.sum(), np.sum(ar,axis = 0))  # 求和,np.sum() → axis为0,按列求和;axis为1,按行求和
print(np.sort(np.array([1,4,3,2,5,6])))  # 排序

输出结果:
在这里插入图片描述
今天的分享就到这里吧,开始学这些基础的东西都是比较枯燥的,但是这些基础的东西学不好的话后面做那些炫酷的图表就比较困难哦,有问题可以私信我呀,看到都会回的,没回就是在写作业啦~

本人是一位211高校在读的本科生,对数据分析比较感兴趣,去年拿到了数学建模国家一等奖,今年参加了美赛还没结果,参加比赛选的题型都是大数据型,用过Excel,Spss,Lingo,MATLAB做数据分析,现在觉得Python比较高效,做数据可视化也非常方便,每天都在坚持学习,对Python数据分析和数据可视化有兴趣的可以关注我哦,每天都会更新的,跟我一起进步呀

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值