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