本次内容我们继续介绍Numpy部分,上周文章中我们介绍了Numpy的数组创建和重塑。本篇文章是介绍Numpy的利器之一:索引和切片。
索引
矩阵索引----取得矩阵中的单个值
在上图的一维矩阵中,矩阵由八个值a1,a2…a10构成,其对应的索引从0开始,一直到9。矩阵在内存中是以一段连续的空间来存储的。
二维矩阵同一维矩阵一样,同样的存在索引,二维矩阵每个值有两个索引,分别对应行和列,以确定索引在矩阵中的位置。 使用索引的方式可以去对矩阵中的单个元素进行操作,如修改,输出等。
一维矩阵的索引使用
我们使用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)
结果:
使用负索引访问矩阵的值
我们在前面学习Python基础的时候讲过索引有正的是从左到右,而且还有负的索引是从右向左的。那Numpy也有负的的吗?
#使用负的索引查看矩阵中元素的值
print("第-1号位置的元素为:",arr[-1])
print("第-6号位置的元素为:",arr[-6])
#使用负的索引查看矩阵中元素的值print("第-1号位置的元素为:",arr[-1])print("第-6号位置的元素为:",arr[-6])
结果是:
使用矩阵做索引
在Numpy中也可以使用列表作为索引,但是我们通常称为矩阵索引。
#使用矩阵做索引
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列的形式
arr = np.arange(12).reshape(3,4)
得到的结果:
注意:行索引与列索引都是从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])
结果:
对应的内容可以参照下图:
切片
切片的概念我们在列表和字符串中都接触过,就是获取的不是单个的内容了,而是部分内容。那应用在我们矩阵中是什么样子的呢?
原来我们使用切片方式获取子列表或者子字符串,切片符号用“ :”表示。可以使用下面的方法来获取矩阵的切片
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])
结果:
二维矩阵的切片操作
二维矩阵的行列获取,除了矩阵的转置可以获取列的信息之外,我们还可以通过下列方式
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,:])
结果:
除了上面的使用方式,我们还可以使用下面这种方式:逗号后面的:3表示0:3就是列的0,1,2列
#切片获取矩阵的前两列
print("矩阵的前三列为:\n",arr[:,:3])
#切片获取矩阵的第第一行和第二行
print("矩阵的第一行和第二行为:(索引从0开始:)\n",arr[0:2,:])
结果:
切片我们也是可以使用负值的,那在Numpy矩阵中也是可以使用的。
#获取前两行三列的值
print("前两行前三列:\n",arr[:2,:3])
#矩阵的行逆序,第三行变为第一行
print("行元素逆序:\n",arr[::-1,:])
#矩阵的列逆序,第四列变为第一列
print("列元素逆序:\n",arr[:,::-1])
#矩阵的逆序
print("逆序:\n",arr[::-1,::-1])
结果:
朋友们!好啦!我们Numpy索引和切片的内容就介绍到这里吧!更多关于“Python培训”的问题,欢迎咨询千锋教育在线名师。千锋教育多年办学,课程大纲紧跟企业需求,更科学更严谨,每年培养泛IT人才近2万人。不论你是零基础还是想提升,都可以找到适合的班型,千锋教育随时欢迎你来试听。