全国旗舰校区

不同学习城市 同样授课品质

北京

深圳

上海

广州

郑州

大连

武汉

成都

西安

杭州

青岛

重庆

长沙

哈尔滨

南京

太原

沈阳

合肥

贵阳

济南

下一个校区
就在你家门口
+
当前位置:首页  >  技术干货

Numpy索引和切片

发布时间:2022-08-12 16:47:48
发布人:qyf

  本次内容我们继续介绍Numpy部分,上周文章中我们介绍了Numpy的数组创建和重塑。本篇文章是介绍Numpy的利器之一:索引和切片。

  索引

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

屏幕快照 2021-04-15 下午7.20.37

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

屏幕快照 2021-04-15 下午7.29.36

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

  一维矩阵的索引使用

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

  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] = -6print("第5号位置的元素为:",arr[5])print("修改后的矩阵值为:",arr)

  结果:

屏幕快照 2021-04-15 下午7.40.46

  使用负索引访问矩阵的值

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

  #使用负的索引查看矩阵中元素的值

  print("第-1号位置的元素为:",arr[-1])

  print("第-6号位置的元素为:",arr[-6])

  #使用负的索引查看矩阵中元素的值print("第-1号位置的元素为:",arr[-1])print("第-6号位置的元素为:",arr[-6])

  结果是:

屏幕快照 2021-04-15 下午7.45.56

  使用矩阵做索引

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

  #使用矩阵做索引

  arr1 = arr[[1,5,9]]

  print("第1,5,9号索引的值为:",arr1)

  print(type(arr1))

  结果:

屏幕快照 2021-04-15 下午7.54.47

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

  二维矩阵的索引使用

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

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

  arr = np.arange(12).reshape(3,4)

  得到的结果:

屏幕快照 2021-04-15 下午7.59.35

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

 

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

  #值使用一个索引时,得到的结果为一行

  print("arr[2]:",arr[2])

  #使用索引来输出矩阵的一列

  print("第2列的值为:",arr.T[2])

  #使用索引来查找具体元素时

  print("第1行第2列的元素值为:",arr[1][2])

  print("第2行第0列的元素值为:",arr[2,0])

  结果:

屏幕快照 2021-04-15 下午8.13.08

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

屏幕快照 2021-04-15 下午8.17.16

  切片

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

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

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

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

  一维矩阵的切片操作

  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])

  结果:

屏幕快照 2021-04-15 下午8.28.16

  二维矩阵的切片操作

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

  arr[ : , 0 ] 格式中逗号前面的【:】表示所有行,逗号后面表示列,所以是第0列

  arr[ 1, : ] 同理 格式中逗号后面的【:】表示所有列,逗号前面表示行,所以是第1行

  arr[ : ,1] 表示的是第一列

  import numpy as np

  arr = np.arange(12).reshape(3,4)

  print("arr值为:\n",arr)

  #矩阵的第0列

  print("矩阵的第0列:\n",arr[:,0])

  #矩阵的第一行

  print("矩阵的第一行:\n",arr[1,:])

  结果:

屏幕快照 2021-04-15 下午8.36.13

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

 

  #切片获取矩阵的前两列

  print("矩阵的前三列为:\n",arr[:,:3])

  #切片获取矩阵的第第一行和第二行

  print("矩阵的第一行和第二行为:(索引从0开始:)\n",arr[0:2,:])

  结果:

屏幕快照 2021-04-15 下午8.42.08

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

  #获取前两行三列的值

  print("前两行前三列:\n",arr[:2,:3])

  #矩阵的行逆序,第三行变为第一行

  print("行元素逆序:\n",arr[::-1,:])

  #矩阵的列逆序,第四列变为第一列

  print("列元素逆序:\n",arr[:,::-1])

  #矩阵的逆序

  print("逆序:\n",arr[::-1,::-1])

  结果:

屏幕快照 2021-04-15 下午8.44.10

  朋友们!好啦!我们Numpy索引和切片的内容就介绍到这里吧!更多关于“Python培训”的问题,欢迎咨询千锋教育在线名师。千锋教育多年办学,课程大纲紧跟企业需求,更科学更严谨,每年培养泛IT人才近2万人。不论你是零基础还是想提升,都可以找到适合的班型,千锋教育随时欢迎你来试听。

相关文章

反欺诈中所用到的机器学习模型有哪些?

反欺诈中所用到的机器学习模型有哪些?

2023-10-14
强化学习中on-policy与off-policy有什么区别?

强化学习中on-policy与off-policy有什么区别?

2023-10-14
为什么交叉熵可以用于计算代价?

为什么交叉熵可以用于计算代价?

2023-10-14
开发网上平台的大概流程有什么?

开发网上平台的大概流程有什么?

2023-10-14

最新文章

常见网络安全面试题:Windows常用的命令有哪些?

常见网络安全面试题:Windows常用的命令有哪些?

2023-10-09
常见网络安全面试题:根据设备告警如何展开排查?

常见网络安全面试题:根据设备告警如何展开排查?

2023-10-09
常见网络安全面试题:mysql加固呢?(数据库加固)

常见网络安全面试题:mysql加固呢?(数据库加固)

2023-10-09
常见网络安全面试题:windows和linux加固?(操作系统加固)

常见网络安全面试题:windows和linux加固?(操作系统加固)

2023-10-09
在线咨询 免费试学 教程领取