通过切片和索引的方式可以访问和修改ndarray对象的内容
ndarray数组可基于0-n的下标进行索引,如,np.array(range(10))的索引是0-9
一维数组的切片和索引:
a=np.array(range(10))
b=a[4]
c=a[4:]
d=a[:4]
e=a[4:9]
f=a[4:9:2]
g=a[-1]
h=a[::-1]
print('a ',a,'\nb ',b,'\nc ',c,'\nd ',d,'\ne ',e,'\nf ',f,'\ng ',g,'\nh ',h)
'''
输出:
a [0 1 2 3 4 5 6 7 8 9]
b 4
c [4 5 6 7 8 9] 有a[4]元素
d [0 1 2 3] 无a[4]元素
e [4 5 6 7 8]
f [4 6 8]
g 9
h [9 8 7 6 5 4 3 2 1 0]
'''
冒号分隔切片参数[start : stop : step]
[strat] 提取该索引对应的单个元素
[strat :] 提取该索引及以后的所有元素(包含strat项元素)
[: stop] 提取该索引之前的所有元素(不包含stop项元素)
[start : stop] 提取两个索引(不包含stop)之间的所有元素
[-1] 提取数组最后一个元素,同理[-2]表示倒数第二个元素,以此类推
[: : -1] 提取所有数据(从后向前提取)
二维数组的切片和索引:
a=np.array(range(25)).reshape(5,5)
#提取行元素
b=a[3]
c=a[3:]
#提取某个元素
d=a[3][3]
e=a[3,3]
#提取列元素, ... 表示全部索引
f=a[...,2]
g=a[...,2:]
print('a ',a,'\nb ',b,'\nc ',c,'\nd ',d,'\ne ',e,'\nf ',f,'\ng ',g)
'''
输出:
a [[ 0 1 2 3 4]
[ 5 6 7 8 9]
[10 11 12 13 14]
[15 16 17 18 19]
[20 21 22 23 24]]
b [15 16 17 18 19]
c [[15 16 17 18 19]
[20 21 22 23 24]]
d 18
e 18
f [ 2 7 12 17 22]
g [[ 2 3 4]
[ 7 8 9]
[12 13 14]
[17 18 19]
[22 23 24]]
'''
提取行元素:
[x] 提取索引为x的一维数组
[x :] 提取该索引及以后的所有一维数组(包含第x行)
提取确定位置的元素:
[x] [y] 或 [x,y] 提取位置为x行y列的元素
提取列元素:
[… , y] 提取第y列
[… , y:] 提取第y列后的所有列(包含第y列)
**用整数索引提取多个指定位置元素:**输出一个数组
a=np.array(range(16)).reshape(4,4)
print("a ",a)
#[1,2,3]表示行索引,[0,1,2]表示列索引
b=a[[1,2,3],[0,1,2]] #提取(1,0)\(2,1)\(3,2)三个元素,并构成一个array
print("b ",b)
#0:3表示行索引[0,1,2],2:4表示列索引[2,3]
c=a[0:3,2:4]
print("c ",c)
'''
输出:
a [[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]
[12 13 14 15]]
b [ 4 9 14]
c [[ 2 3]
[ 6 7]
[10 11]]
'''
**用布尔索引提取满足特定条件元素:**输出一个数组
x=np.array(range(10))
#单条件索引
a=x[x<7]
b=x[x>=8]
#多条件索引,(使用&与|)
c=x[(x<2)|(x>8)]
d=x[(x>2)&(x<8)]
print('a ',a,'\nb ',b,'\nc ',c,'\nd ',d)
'''
输出:
a [0 1 2 3 4 5 6]
b [8 9]
c [0 1 9]
d [3 4 5 6 7]
'''