数组的索引与切片
- 索引:获取数组中特定位置元素的过程
- 切片:获取数组元素子集的过程
最简单基本的切片
a = np.array([9,8,7,6,5]) a[2] #out 7 a[1:4:2} #out array[8,6]
数组的切片
a = np.arange(24).reshape((2,3,4))
a #out如下图
a[1,2,3] #out:23
a[0,1,2] #out:6
a[-1,-2,-3] #out:17
**数组的切片
a[:, 1, -3] #out:array[5,17]
a[:, 1:3 ,:] #如下图
a[:, :, ::2] #如下图2
为什么是这样的呢?
1.1维度的解释
关于维度,一维其实就是数组内容,最基本的几个数据组成的一个数组就是一维数组
- [0,1,2,3] #一维数组
- [ [0,1,2,3], [0,1,2,3], [1,2,3,4] ] #数组里面包含数组,二维数组
- [ [ [0,1,2,3], [0,1,2,3] ],
[ [0,1,2,3], [0,1,2,3] ] ] #类似层层嵌套(这是个三维数组)
其实有一个简单判断是几维数组的方法,那就是:数中括号最多的括号数,括号数为几,就是几维度
例如,三维数组最前面有三个括号(所有数字前括号最多的,所以为三维数组)
这里其实还有一个易错点,不是有几个数组就有几维了(实际无论有多少个数组它都是在这一个维度内),很多次我都会无意识犯这种错误,认为类似shape(10,10)是10维数组,其实这是很离谱的错误,其实它只是一个二维数组.取决于数组的并不是数组的个数,而是数组嵌套的次数.其实维度数为shape内的数字个数,例如:
(10,2,3) 就是三维数组
(1,3,2,7,4)就是五维数组
1.2数组切片的格式
数组的切片格式是:[n维,n-1维.,...,3维,2维,1维]
其实每个维度切片都是靠a:b类似的类型,而靠","才分开了各个维度
所以解释起来也就是
2.一维取到1:3(取维度和行,列数从零开始),而零维和二维全取
3.一维二维全取,零维步长为2.
练习:打印边框为0内部为1的10*10矩阵
import numpy as np
a = np.ones((10,10))
a[0,:] = 0
a[-1,:] = 0
a[:,0]= 0
a[:,-1]= 0
a