好久没有更新文章了,除了忙于一些琐碎的事情,更重要的是想将学到的东西加以历练,以便更加成熟的展示给大家

好了开始今天的正题

Numpy 模块的索引和切片不得不和python当中列表的索引和切片联系起来

一维数组:

对于模块中的一维数组,我认为它和列表的索引和切片没有区别。

import numpy as np
arr = np.arange(10)
print(arr)

arange 函数: 类似python中的内置函数range, 生成一个由参数构成的列表




pytho存切片索引 numpy切片与索引_pytho存切片索引


请记住,在numpy中对于一维数组,也就是列表的索引不是根据下标来索引

arr = np.arange(10)
print(arr)
index = arr[6]
print(index)


pytho存切片索引 numpy切片与索引_一维数组_02


如果我们是根据普通列表索引的话,结果应该是5 ,但是通过numpy进行索引的话结果是6,我通常把它认为是通过编号开始索引元素


pytho存切片索引 numpy切片与索引_Powered by 金山文档_03


如果我需要元素 “5”,我在索引的时候就应该通过编号来打印 arr[3],而不是下标来进行索引,这块是是我思考了很久的结果。

import numpy as np
arr = np.arange(10)
print(arr)
index = arr[6:8]
print(index)


pytho存切片索引 numpy切片与索引_一维数组_04


在这里我们看到了,无论是普通索引还是numpy 中对一维数组的索引,索引元素时,都是仅包括右边的数值而不包括左边的数值。

下来我们了解一个更高级的用法,对一维数组中某一些元素进行篡改

arr = [0, 1 ,2 ,3, 4, 5 ,6 ,7, 8, 9]
#我们首先对我们需要的数据进行索引,假设我们需要的数据是 4,5,6
arr[4:7]
#接着我们对获取的数据进行篡改
arr[4:7] = 12
print(arr)

打印的结果: [0, 1 ,2 ,3, 12, 12 ,12 ,7, 8, 9]

请记住:这里一维数组的切片反映的是原数组的视图,这意味着数据并不是被复制了,对于任何视图的的修改都会反映到原数组上。

视图:在mysql中视图并不是数据真实存储的位置,视图数据的真是来源,是在表格中,据对视图数据的修改都是对原数据的修改。

下面我来提升一些难度,看看大家是否看得懂

对二维数组来进行索引和切片,

定义一个二维数组:

import numpy as np
arr =np.array( [[0, 1 ,2] ,[3, 4, 5] ,[6 ,7, 8]])
print(arr)


pytho存切片索引 numpy切片与索引_Python数据分析_05


关于如何判断一个数组为几维数组,请观看它的开头和结尾的括号数,下面它是一个二维数组


pytho存切片索引 numpy切片与索引_一维数组_06


下来我们对它进行索引:

arr =np.array( [[0, 1 ,2] ,[3, 4, 5] ,[6 ,7, 8]])
index = arr[0]   #获取编号为0的行
print(index)


pytho存切片索引 numpy切片与索引_数据_07


我们通过这张二维表来理解二维数组


pytho存切片索引 numpy切片与索引_数据_08


如果我们给索引传入两个参数,会发生什么? 例如: arr[1,2]


pytho存切片索引 numpy切片与索引_一维数组_09


有的同学会问, arr[1,2] 不应该是获取该二维数组中第一行和第二行,有可能不需要第二行,请记住 这是索引不是切片,切片书写的方式是,arr[1:2],这样获取的结果应该是只能拿到第数组中的第一行,不包括第二行


pytho存切片索引 numpy切片与索引_pytho存切片索引_10


arr[1,2] 它的意思呢,我想将它表示为 arr[x,y],或者arr[Axis 0,Axis 1],在索引中,第一个参数表示为行,第二个参数为列,arr[1,2],表示我将会会拿到arr数组中,编号为1的行,编号为2的列,单独元素

请记住,索引针对的是某一元素,而切片针对的是一个范围的数据,一个是讲单独,一个是讲范围