用python进行数据分析之NumPy库知识详解

该文章仅为博主学习完numpy库之后的一个小小总结,讲解还有很多漏洞,望见谅。如果读者想查漏补缺或者是温故一下这一块的知识,那么欢迎大家浏览本文,也许其中就有你想看到的内容呢。
如果有同学不太会安装python库的话可以看一下这个链接中的讲解https://blog.csdn.net/qq_44614524/article/details/97504700
(一)库的引入
安装好了库之后,我们首先进行库的导入或者说引用(import)。下面我们罗列出三种引入库的方式

import numpy
import numpy as np
from numpy import *

第一种就是最简单、基础的,直接将我们需要的库用import进行引入;第二种其实是最常见的,因为它通过 as 将numpy重新命名为np,在后续的使用中不需要繁琐的输入这么多字母(这里默认是也是一个不成文的规定:我们将其命名为np)当然你可以命名为任何你喜欢的名字。第三个方法会直接将所有的函数进行引入,并不推荐这个引入方法,因为库中的函数可能会和你自己定义的或者是python的内置函数冲突。
(二)数组对象
有同学要问了,我们为什么要在这里还学习数组呢?我在python入门的时候学习了列表。答案很简单,因为有些操作如果使用列表的话是完成不了的,比如我们给每个元素都进行算数操作( + - * / 等),如果用列表的话我们需要循环,那么他的效率就会显著下降,在数组这里,我们就能很方便的通过一行代码完成这工作。下面我们给出对比代码:

#使用列表进行每个元素的算术运算
a = [1,2,3,4]

print([(x + 1) for x in a])
#import numpy as np
#采用 数组方式进行每个元素的算术运算
a = np.array([1,2,3,4])
print(a + 1)

上面我们采用numpy库生成的数组的时候用到了**np.array()**这就是Numpy库来生成数组的方法,括号里可以是一个列表,嵌套数组比如np.array([1, 2, 3,] , [,4, 5, 6,])。对于多维数组,我们就可以来检查其一些特性,比如维度,类型等
在这里插入图片描述
查看类型我们使用的是 dtype()方法;查看形状我们用shape()方法。可以看出我们采用嵌套列表生成的数组是两行四列的二维数组且数据类型为Int型。对于生成函数的方法这里,我们还有一些简单的生成特定形式的方法,比如生成全 0 数组,全 1 数组,使用 fill()进行填充等
在这里插入图片描述
注意:如果没有特别指明的话,NumPy生成的数据类型是float64(浮点型) 下面是一些其他的数组生成函数及其描述。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
(三)数组属性

1.查看类型:我们继续使用上面的随机数序列,我们查看他的类型:直接使用 type() 即可。
在这里插入图片描述
如果我们要看数组中每一个元素的数据类型的话我们可以使用 dtype() 进行查看,可以看出每一个数据都是我们默认的 float 64 类型。
在这里插入图片描述
我们还可以查看数组的维度:使用 ndim(),和数组里面元素的个数:使用 size()。不难看出,数组维度是1维,数组个数是 5 ,因为我们采用的是 randn(5) 来生成的随机数数组
在这里插入图片描述
我们也可以使用astype()方法显式的转换数组的数据类型 。代码如下:
在这里插入图片描述
2.排序:基本的sort()函数与列表元素排序的使用方式一致,在此基础上我们还有argsort()函数,它可以返回从小到大排列在数组中元素的位置位置位置。示例代码如下:
在这里插入图片描述
第一个输出我们返回原始数组里面从小到大的排序的下标下标下标(注意:这里是下标)输出的 3 1 2 5 0 4 意思是最小的元素的下标是 3 然后是下标为 1 的元素,以此类推…。然后我们调用sort()对原始数组进行排序,结果得到一个元素从小到大排列的数组,之后我们再次调用argsort()来查看数组中从小到大元素的下标(位置、索引),我们可以发现最小元素的下标(索引、位置)为0,之后是 1,以此类推…
(四)索引与切片

这里我们理解起来应该很容易,数组的切片和列表的切片的使用方法相同。支持使用冒号(:)分隔的索引,负数作为下表进行索引,或者直接指明元素位置进行索引等一系列列表的索引方式。需要注意的一点是他的切片区间是左闭右开区间
1.拓展阅读(大家可以选择性跳过):深拷贝与浅拷贝:他们本质的区别是拷贝出来的对象的地址是否和原对象一样,如果拷贝出来的对象地址与原来对象地址相同,则为深拷贝,否则就是浅拷贝。我们也可以这么理解:深拷贝就是完全跟以前就没有任何关系了,原来的对象怎么改都不会影响当前对象;浅拷贝:原对象的元素改变的话会改变当前对象,如果当前对象中元素改变了,也同样会影响原对象。代码如下:

import copy
a = [1, 2, 3, [4, 5]]
print('最开始a的输出:')
print(a)
b = copy.deepcopy(a)        #深拷贝
c = copy.copy(a)            #浅拷贝
print('最开始b的输出:')
print(b)
print('最开始c的输出:')
print(c)
a.append(100)
a[3].append('a')
print('进行修改之后b的输出:')
print(b)
print('进行修改之后a的输出:')
print(a)
print('进行修改之后c的输出:')
print(c)

输出结果如下:

最开始a的输出:
[1, 2, 3, [4, 5]]
最开始b的输出:
[1, 2, 3, [4, 5]]
最开始c的输出:
[1, 2, 3, [4, 5]]
进行修改之后b的输出:
[1, 2, 3, [4, 5]]
进行修改之后a的输出:
[1, 2, 3, [4, 5, 'a'], 100]
进行修改之后c的输出:
[1, 2, 3, [4, 5, 'a']]

Process finished with exit code 0

通过输出结果我们可以看到深拷贝的 b 当遇到 a 的值被修改之后他的输出并没有发生任何变化,说明深拷贝的列表与原来的列表已经没有关系,成为了一模一样的另一个列表。但是浅拷贝列表 c 在遇到原来列表的值被修改的时候其值发生了一定的变化,说明浅拷贝并没有完全脱离早先列表的控制。
2.花式索引:一种奇特的索引方式:举例代码如下:
在这里插入图片描述
在第二行我们定义了一个bool类型的数组,在输出的时候我们相当于是取了一个交集,将bool值为真的对应到a数组里的数取出,因此我们可以看出我们将原始数组中的 2 和 4 进行了取出。
3.where语句:他将取出所有非0元素的索引
在这里插入图片描述
在第一打印语句的时候,我们明显的可以看出数组中的那些数字是大于 3 的(返回值为true),那么如果我们想让代码将数值大于三的元素的下标(索引)返回该怎么办呢?我们可以使用where语句(第二个输出语句),注意:where返回值是一个元组。
(五)常用函数举例:

1.求和、sum()函数:用法同内置函数:
在这里插入图片描述
2.最大值max()、最小值min():
在这里插入图片描述
3.平均数(均值)、标准差:如果看不懂下列代码,可能您需要在重温一下python的基础语法了。np.mean()调用np库中的mean()方法进行运算,第二个同理。
在这里插入图片描述
基本的库函数有很多,不可能都给大家罗列出来,但是只要大家知道该怎么去使用,在需要的时候我们去搜索,然后直接使用就OK,但是对于一些常见的函数我们还是记住的好,毕竟这样可以给我们省去很多不必要花费的时间。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值