【20天搞定数据分析】第三天:可能是全网最清晰易懂的Numpy教程
千锋python
2021年04月25日 17:25
收录于文集
共20篇

【千锋教育干货暴击】

如果你想更好的学习Python乃至转行,弯道超车,快人一步!本课程零基础即可加入学习,抓住大数据、机器学习、人工智能时代的红利,开启你的第一行代码吧!

   ↓    ↓    ↓

千锋Python全套视频教程(700集)​

千锋教育Python教程全套_python零基础入门到精通(学完可达到Python工程师水平)​


本次内容我们继续介绍Numpy部分,上次文章中我们介绍了Numpy的数组创建和重塑。

本篇文章是介绍Numpy的利器之一:索引和切片。

索引

矩阵索引----取得矩阵中的单个值

在上图的一维矩阵中,矩阵由八个值a1,a2…a10构成,其对应的索引从0开始,一直到9。矩阵在内存中是以一段连续的空间来存储的。

二维矩阵同一维矩阵一样,同样的存在索引,二维矩阵每个值有两个索引,分别对应行和列,以确定索引在矩阵中的位置。使用索引的方式可以去对矩阵中的单个元素进行操作,如修改,输出等。

一维矩阵的索引使用

我们使用np.arange产生从0-9的一个矩阵,根据索引获取元素打印出来,然后我们尝试通过索引修改一下元素的值,也来查看一下。

代码块
JavaScript
自动换行
复制代码
import numpy as np
#使用np.arange产生从0-9的一个矩阵
arr = np.arange(10)
print("一维矩阵arr的值为:",arr)
#使用索引去查看矩阵中具体元素的值
print("第0号位置的元素为:",arr[0])
print("第8号位置的元素为:",arr[5])
#使用索引的方式去改变矩阵中某一元素的值
arr[5] = -6
print("第5号位置的元素为:",arr[5])
print("修改后的矩阵值为:",arr)
复制成功

结果:

使用负索引访问矩阵的值 我们在前面学习Python基础的时候讲过索引有正的是从左到右,而且还有负的索引是从右向左的。那Numpy也有负的的吗?

代码块
JavaScript
自动换行
复制代码
#使用负的索引查看矩阵中元素的值
print("第-1号位置的元素为:",arr[-1])
print("第-6号位置的元素为:",arr[-6])
复制成功

结果是:

使用矩阵做索引

在Numpy中也可以使用列表作为索引,但是我们通常称为矩阵索引。

代码块
JavaScript
自动换行
复制代码
#使用矩阵做索引
arr1 = arr[[1,5,9]]
print("第1,5,9号索引的值为:",arr1)
print(type(arr1))
复制成功

结果:

看完了一维的矩阵我们来看一下二维的矩阵使用情况吧!

二维矩阵的索引使用

二维矩阵具有行和列两个方向,就像上面给出的那张图一样,所以在使用二维矩阵的索引时,一个索引只能代表着一个方向,则在二维矩阵中访问具体的元素时,应使用两个索引来确定行和列的位置,若只有一个索引时,则得到的结果为一行或一列。

首先说一下reshape()的使用,reshape就是将前面的序列转成指定的矩阵形式,比如reshape(3,4)就是指3行4列,如果是reshape(2,5)就是2行5列的形式

代码块
JavaScript
自动换行
复制代码
arr = np.arange(12).reshape(3,4)
复制成功

得到的结果:

注意:行索引与列索引都是从0开始的,为了能更加清楚的看清列的情况我们可以使用arr.T表示转置

默认是arr[0]表示获取的是第一行的内容,而如果使用arr.T[0]表示获取的是第一列的内容。

代码块
JavaScript
自动换行
复制代码
#值使用一个索引时,得到的结果为一行
print("arr[2]:",arr[2])
#使用索引来输出矩阵的一列
print("第2列的值为:",arr.T[2])
#使用索引来查找具体元素时
print("第1行第2列的元素值为:",arr[1][2])
print("第2行第0列的元素值为:",arr[2,0])
复制成功

结果:

对应的内容可以参照下图:

切片

切片的概念我们在列表和字符串中都接触过,就是获取的不是单个的内容了,而是部分内容。那应用在我们矩阵中是什么样子的呢?

原来我们使用切片方式获取子列表或者子字符串,切片符号用“ :”表示。可以使用下面的方法来获取矩阵的切片

arr = array[start,end,step] ,start表示开始的位置,end表示结束的位置,step表示步长。

如果参数列表中三个值存在缺省的情况,则会被设置为默认值:start=0,end=数组的维度,step=1

一维矩阵的切片操作

代码块
JavaScript
自动换行
复制代码
import numpy as np
arr = np.arange(10)
print("arr:",arr)
#缺省三个参数的情况
print("三个参数都不写:",arr[::])
#三个参数都写
print("arr[1:11:2]的值:",arr[1:11:2])
#缺省start和step参数
print("缺省start和step参数:",arr[:4:])
#逆向输出矩阵
print("步长为-1:",arr[::-1])
复制成功

结果:

二维矩阵的切片操作

二维矩阵的行列获取,除了矩阵的转置可以获取列的信息之外,我们还可以通过下列方式

代码块
JavaScript
自动换行
复制代码
arr[ : , 0 ] 格式中逗号前面的【:】表示所有行,逗号后面表示列,所以是第0列
arr[ 1, : ] 同理 格式中逗号后面的【:】表示所有列,逗号前面表示行,所以是第1行
arr[ : ,1] 表示的是第一列
复制成功

结果:

除了上面的使用方式,我们还可以使用下面这种方式:逗号后面的:3表示0:3就是列的0,1,2列

代码块
JavaScript
自动换行
复制代码
#切片获取矩阵的前两列
print("矩阵的前三列为:\n",arr[:,:3])
#切片获取矩阵的第第一行和第二行
print("矩阵的第一行和第二行为:(索引从0开始:)\n",arr[0:2,:])
复制成功

结果:

切片我们也是可以使用负值的,那在Numpy矩阵中也是可以使用的。

代码块
JavaScript
自动换行
复制代码
#获取前两行三列的值
print("前两行前三列:\n",arr[:2,:3])
#矩阵的行逆序,第三行变为第一行
print("行元素逆序:\n",arr[::-1,:])
#矩阵的列逆序,第四列变为第一列
print("列元素逆序:\n",arr[:,::-1])
#矩阵的逆序
print("逆序:\n",arr[::-1,::-1])
复制成功

结果:

朋友们!好啦!我们Numpy索引和切片的内容就介绍到这里吧!

别忘记观看课程哦!


需要资料也可以关注微信公众号:Python专栏,事不宜迟,一起进步吧!