Numpy 三维数组索引与切片的实现
在本篇的开始之前,我必须阐明,我们对数组无论是索引还是切片,我是通过编号(或称为序列号)来进行操作,请记住:无论是 0轴(行)还是 1轴(列),编号都是从0开始
这是一个三维数组,关于如何判断所定义的是几维数组,请观察数组的开头和结尾的中括号数目
import numpy as np #这是一个 2x2x3 的三维数组 arr =np.array( [[[0, 1 ,2] ,[3, 4, 5]] ,[[6 ,7, 8],[9,10,11]]]) print(arr)
在多维数组中,如果你忽略后续的索引参数,他打印出的结果将会降低一个维度
我将会打印它的完整数组,以便大家用以比对
将定义的三维数组降低了一个维度,成为了二维数组
#打印以下结果 arrs = arr[1,2] #index 2 is out of bounds for axis 1 with size 2 索引2超出大小为2的轴1的范围
我们可以分析一下出现这种问题的原因:
1,首先我这是索引,arr[1,2] 的含义是,取编号是1的行,编号是2的行,我们可以思考一下,三维数组降低一个维度应是二维数组,二维数组降低一个维度应是一维数组,arr[1,2]中的“1”呢,应是三维数组中的编号为“1”的行,三维数组中编号为“1”的行,应是一个二维数组,arr[1,2]中的“2”呢,应该在二维数组的基础上,就要降低一个维度,为一维数组,在下图中一维数组只有两行,编号分别为“0”和“1”哪里来的编号为“2”呢?是不是超出索引范围了。
同样对三维数组来说,我们也可以使用类似视图的操作
arr =np.array( [[[0, 1 ,2] ,[3, 4, 5]] ,[[6 ,7, 8],[9,10,11]]]) print(arr) #打印以下结果 new_long = arr[0] new_long = 22 print(arr)
我们经过将arr 三维数组中的编号为“0”的行arr[0]拿出来,赋值给了变量名new_long ,然后将new_long进行重新赋值为 “22”,new_long的值其实就是 arr[0]的值,我们将三维数组arr的打印出来,显然数组的元素值并没有发生任何变化。有的同学会问这有什么意义呢?
我们可以对数组切片做同样的操作来看看变化
import numpy as np #这是一个 2x2x3 的三维数组 arr =np.array( [[[0, 1 ,2] ,[3, 4, 5]] ,[[6 ,7, 8],[9,10,11]],[[12,13,14],[15,16,17]]]) print(arr) #打印以下结果 #我把arr三维数组中编号为“1”,和编号为“2”的数组拿了出来赋值给一个新定义的变量名new_long new_long = arr[0:2] # print(new_long) #我对new_long中的数据进行了篡改 new_long[0] = 22 # arr[0] = new_long #但是当我打印最初定义的三维数组 arr时,发现它的数据被篡改 print(arr)
你看发生了变化,我将三维数组中前两行拿了出来,是两个二维数组,然后我对第一个二维数组进行篡改当我再次打印最初定义的三维数组时发现它的数据发生了变化。最初定义的数组也被篡改了
说明了什么在numpy模块中定义的数组无论是几维,都遵循一个定义数组的切片是原数组的视图,任何对于视图的修改都会反映到原数组上。
到此这篇关于Numpy 三维数组索引与切片的实现的文章就介绍到这了,更多相关Numpy 三维数组索引与切片内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
python搭建服务器实现两个Android客户端间收发消息
这篇文章主要为大家详细介绍了python搭建服务器实现两个Android客户端间收发消息,具有一定的参考价值,感兴趣的小伙伴们可以参考一下2018-04-04python中用cantools和can工具包解析blf文件的方法
这篇文章主要给大家介绍了关于python中用cantools和can工具包解析blf文件的相关资料,blf数据不像mf4那样自带信号数据库,因为它是记日志用的,一般情况下要尽可能的小,需要的朋友可以参考下2023-09-09Python 实现3种回归模型(Linear Regression,Lasso,Ridge)的示例
这篇文章主要介绍了Python 实现 3 种回归模型(Linear Regression,Lasso,Ridge)的示例,帮助大家更好的进行机器学习,感兴趣的朋友可以了解下2020-10-10python基于tkinter制作无损音乐下载工具(附源码)
这篇文章主要介绍了python基于tkinter制作无损音乐下载工具(附源码),帮助大家更好的理解和学习使用python,感兴趣的朋友可以了解下2021-03-03基于tensorflow __init__、build 和call的使用小结
这篇文章主要介绍了基于tensorflow __init__、build 和call的使用小结,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧2021-02-02如何用scheduler实现learning-rate学习率动态变化
这篇文章主要介绍了如何用scheduler实现learning-rate学习率动态变化问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教2023-09-09
最新评论