1、常规办法:数组元素的存取方法和Python的标准方法相同
a = np.arange(10) #>>[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] # # # 获取某个元素 print(a[3]) #>> 3 # # # 切片[3,6),左闭右开 print(a[3:6]) #>> [3, 4, 5] # # # 省略开始下标,表示从0开始 print a[:5] #>>[0, 1, 2, 3, 4] # # # 下标为负表示从后向前数 print( a[3:]) #>>[3, 4, 5, 6, 7, 8, 9] # # # 步长为2 print a[1:9:2] #>>[1, 3, 5, 7] # # # 步长为-1,即翻转 print (a[::-1]) #>>[9, 8, 7, 6, 5, 4, 3, 2, 1, 0] # # # 切片数据是原数组的一个视图,与原数组共享内容空间,可以直接修改元素值 a[1:4] = 10, 20, 30 print( a) #>>[ 0, 10, 20, 30, 4, 5, 6, 7, 8, 9] # # # 因此,在实践中,切实注意原始数据是否被破坏,如: b = a[2:5] b[0] = 200 print( a) #>>[ 0 10 200 30 4 5 6 7 8 9]
2、整数/布尔数组存取1)整型 # 根据整数数组存取:当使用整数序列对数组元素进行存取时,将使用整数序列中的每个元素作为下标,整数序列可以是列表(list)或者数组(ndarray)。 # 使用整数序列作为下标获得的数组不和原始数组共享数据空间。
a = np.logspace(0, 9, 10, base=2) print (a) #>>[ 1., 2., 4., 8., 16., 32., 64., 128., 256., 512.] i = np.arange(0, 10, 2) print i #>>[0, 2, 4, 6, 8]# # # 利用i取a中的元素 b = a[i] print b # # b的元素更改,a中元素不受影响 b[2] = 1.6 print b #>>[ 1. , 4. , 1.6, 64. , 256. ] print a #>>[ 1., 2., 4., 8., 16., 32., 64., 128., 256., 512.]
2)布尔数
使用布尔数组i作为下标存取数组a中的元素:返回数组a中所有在数组b中对应下标为True的元素
# 生成10个满足[0,1)中均匀分布的随机数 a = np.random.rand(10) print(a) #>>array([0.18508752, 0.46099816, 0.80814244, 0.34301555, 0.92376581, 0.23402939, 0.74400314, 0.55217242, 0.46284303, 0.61656194])
# 大于0.5的元素索引print(a > 0.5) #>>[False False True False True False True True False True]
# 大于0.5的元素b = a[a > 0.5]print(b)#>>[0.80814244, 0.92376581, 0.74400314, 0.55217242, 0.61656194]# 将原数组中大于0.5的元素截取成0.5a[a > 0.5] = 0.5
#>>[0.18508752, 0.46099816, 0.5 , 0.34301555, 0.5 , 0.23402939, 0.5 , 0.5 , 0.46284303, 0.5 ]
# b不受影响
3) 二维数组的切片
# [[ 0 1 2 3 4 5] # [10 11 12 13 14 15] # [20 21 22 23 24 25] # [30 31 32 33 34 35] # [40 41 42 43 44 45] # [50 51 52 53 54 55]] a = np.arange(0, 60, 10) # 行向量 print (a) #>>[ 0, 10, 20, 30, 40, 50] b = a.reshape((-1, 1)) # 转换成列向量 print (b) #>>[[ 0], # [10], # [20], # [30], # [40], # [50]] c = np.arange(6) print(c) #>>[0, 1, 2, 3, 4, 5] f = b + c # 行 + 列 print(f) #>> [[ 0, 1, 2, 3, 4, 5], # [10, 11, 12, 13, 14, 15], # [20, 21, 22, 23, 24, 25], # [30, 31, 32, 33, 34, 35], # [40, 41, 42, 43, 44, 45], # [50, 51, 52, 53, 54, 55]] # 合并上述代码: a = np.arange(0, 60, 10).reshape((-1, 1)) + np.arange(6) print(a) #>>[[ 0, 1, 2, 3, 4, 5], # [10, 11, 12, 13, 14, 15], # [20, 21, 22, 23, 24, 25], # [30, 31, 32, 33, 34, 35], # [40, 41, 42, 43, 44, 45], # [50, 51, 52, 53, 54, 55]] # 二维数组的切片 print( a[(0,1,2,3), (2,3,4,5)] ) #>>[ 2, 13, 24, 35] print( a[3:, [0, 2, 5]]) #>>[[30, 32, 35], # [40, 42, 45], # [50, 52, 55]] i = np.array([True, False, True, False, False, True]) print( a[i]) # >> [[ 0, 1, 2, 3, 4, 5], # [20, 21, 22, 23, 24, 25], # [50, 51, 52, 53, 54, 55]] print( a[i, 3]) # >>[ 3, 23, 53]
来源:https://www.cnblogs.com/Theo-sblogs/p/12264697.html