Python数据分析之Numpy初体验

举报
yd_259031995 发表于 2022/10/13 23:38:11 2022/10/13
【摘要】 前言本文阅读需要您对python有一点基础,如果有不懂得概念,请善用搜索引擎。本人官方博客地址:www.zacarx.com 导入我们有多种导入方法不过,我比较推荐的是:import numpy as np这样,我们就完成了导入工作 数组对象及其索引我们引入两个数组a = [1,2,3,4]b = [2,3,4,5]如果我们需要将a的元素相加,我们可以使用for语句如果我们让a,b对应元素...

前言

本文阅读需要您对python有一点基础,如果有不懂得概念,请善用搜索引擎。

本人官方博客地址:www.zacarx.com

导入

我们有多种导入方法

不过,我比较推荐的是:

import numpy as np

这样,我们就完成了导入工作

数组对象及其索引

我们引入两个数组

a = [1,2,3,4]
b = [2,3,4,5]

如果我们需要将a的元素相加,我们可以使用for语句

如果我们让a,b对应元素相加,也是需要for的帮助

不过比较麻烦,这时,我们就可用numpy了

如:

a = np.array([1,2,3,4])
a
>>>array([1, 2, 3, 4])
a+1
>>>array([2, 3, 4, 5])
b= np.array([2,3,4,5])
a+b
>>>array([3, 5, 7, 9])

显然,使用numpy将大大简化我们的工作,不过这对它来说只是小菜一碟。

数组产生

下来,我们将看下几个比较便利的产生数组的方法

比如生成全0数组:

a=np.zero(5)

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

值得注意的是,中括号内元素,默认浮点数

当然,我们也可以指定一下:

a=(np.zero(5),dtype=int)

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

这样就生成的是整数了

此外,我们还可以使用astype进行类型转换

如:

a = a.astype("float")

这样就可以把数组a的元素转换为浮点数

此外,我们还可以这样生成数列:

左闭右开区间,和range的使用方式同理

a = np.arange(1,10)
a
>>>array([1.3, 2.3, 3.3, 4.3, 5.3, 6.3, 7.3, 8.3, 9.3])

当然,我们也可以生成随机数

np.random.rand(10)
>>>array([0.48273436, 0.00581325, 0.16110313, 0.52234425, 0.63905254, 0.42691122, 0.37196789, 0.57188523, 0.46437865, 0.43126664])
np.random.randint(1,20,10) 
#生成随机整数,从1-20中随机10个
>>>array([12,  6,  4,  3, 13, 19,  5,  4, 14, 16])

数组属性

这个暂时没有太大用处

等用得到的地方我们再来好好讲解

下来,我们简单提一下比较常用的吧:

查看类型:type(a)

查看数组中的数据类型:a.dtype

查看形状,会返回一个元组,每个元素代表这一维的元素数目:a.shape

查看数组元素个数:a.size

Ok,以上就是简单的属性查看方法

如果有需要我会再进行补充。

索引和切片

以下操作非常简单,我们只需类比一下列表即可

我不做过多讲解了,QAQ

a = np.array([0,1,2,3])
a[0]
>>>0
a[0] = 10
a
>>>10
a[1:3] #等价于a[-3,3]
>>>array([1,2])

下面介绍一下省略参数的用法

如:

a = array([1,2,3,4,5])
a[-2:]
>>>array([4,5])

这样,输出倒数第二个数字及以后的数字

a = array([1,2,3,4,5])
a[::2]
>>>array([1,3,5])

这样输出从头到尾的数字,不过间隔为2.

多维数组

我们一般使用下面这个方法生成多维数组:

a = np.array([[0,1,2,3],[10,11,12,13]])
a
>>>array([[ 0,  1,  2,  3],
       [10, 11, 12, 13]])

我们可以进行索引还有赋值:

a[1,3]
>>>13
a[1,3]=999
a[1,3]
>>>999
a
>>>array([[ 0,  1,  2,  3],
       [10, 11, 12, 999]])

1是行索引,3是列索引,中间用逗号隔开。事实上,Python会将它们看成一个元组(1,3),然后按照顺序对应。

当然,我们也可以进行整行整列的索引

a[1]
>>>array([ 0,  1,  2,  3])
a[:,1]
>>>array([ 1, 11])

下面,我们看一下切片操作吧

有了上述的知识基础,相信你也能够看懂了吧。

a = np.array([[0,1,2,3,4,5],[10,11,12,13,14,15],[20,21,22,23,24,25],[30,31,32,33,34,35],[40,41,42,43,44,45],[50,51,52,53,54,55]])
a
>>>array([[ 0,  1,  2,  3,  4,  5],
       [10, 11, 12, 13, 14, 15],
       [20, 21, 22, 23, 24, 25],
       [30, 31, 32, 33, 34, 35],
       [40, 41, 42, 43, 44, 45],
       [50, 51, 52, 53, 54, 55]])
a[0,3:5]
>>>array([3, 4])
a[4:,4:]
>>>array([[44, 45],
       [54, 55]])
a[2::2,::2]
>>>array([[20, 22, 24],
       [40, 42, 44]])

ok,是不是非常简单,赶快去试一试吧。

不知你会不会注意到一个现象

比如:

a = np.array([0,1,2,3,4])
b = a[2:4]
b
>>>[2 3]
b[0] = 10
a
>>>array([ 0,  1, 10,  3,  4])

显然,Python并没有为b分配新的空间来存储它的值,而是让b指向了a所分配的内存空间,因此,改变b会改变a的值

一定要注意这一点,因为它很容易忽略T-T,你还找不到原因。

okk,那我们怎么解决它捏?

这就要提到copy方法了

a = np.array([0,1,2,3,4])
b = a[2:4].copy()
b[0] = 10
a

ok,成功解决!

高级索引

除了以上所使用的索引,还有更高级的高级索引

如:

a = np.array([0,2,3,0,0,1,0,0,1,0],dtype = bool)
a
>>>array([False,  True,  True, False, False, True, False, False, True, False])

当然还可以这样:

a = np.array([[0,1,2,3,4,5],[10,11,12,13,14,15],[20,21,22,23,24,25],[30,31,32,33,34,35],[40,41,42,43,44,45],[50,51,52,53,54,55]])
a
>>>array([[ 0,  1,  2,  3,  4,  5],
       [10, 11, 12, 13, 14, 15],
       [20, 21, 22, 23, 24, 25],
       [30, 31, 32, 33, 34, 35],
       [40, 41, 42, 43, 44, 45],
       [50, 51, 52, 53, 54, 55]])
a[(0,1,2,3,4),(1,2,3,4,5)]
>>>array([ 1, 12, 23, 34, 45])

这样我们就可以得到对角线上的5个值了

以上两个例子仅仅为了给家人们一点思路

家人们也可以配合省略参数等用法,玩出更多新花样。

数组函数

最后,我们来看看数组应用比较多的几个函数吧

其实非常简单

如下:

a=([1,3,2,3,22822,4,2,2,4,2,99,4,4,44,444,222,44,])
np.sort(a)
>>>array([    1,     2,     2,     2,     2,     3,     3,     4,     4,  4,    4,    44,    44,    99,   222,   444, 22822])
#排序

np.sum(a)
>>>23706
#求和

np.max(a)
>>>22822
np.min(a)
>>>1
#最大最小

np.mean(a)
#均值
>>>1394.4705882352941

np.std(a) 
#标准差
>>>5358.042642142492

#协方差矩阵
np.cov(a)
>>>array(30502909.76470589)

ok,以上就是numpy的简单用法

感谢您的阅读!

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。