Numpy数组的元素存取方法有以下几种:
2. 通过切片。
格式: a[起始值 : 终值 : 步长] 注意,结果不包含终值。
>>> a[3:5]
array([3, 4])
>>> a[1 : -1 : 2]
array([ 1, 3, 99, 7])
>>> a[: : -1] #返回倒转的数组
array([ 9, 8, 7, 6, 99, 4, 3, 2, 1, 0])
>>> a[5: 1: -2] #步长为负,终值须大于起始值
array([99, 3])
注意,和 Python的序列不同,通过切片获取的新数组只是原数组的一个视图,它与原数组共享内存中同一块数据空间。
>>> b = a [3:7]
>>> a
array([ 0, 1, 2, 3, 4, 99, 6, 7, 8, 9])
>>> b
array([ 3, 4, 99, 6])
>>> b[2] = -10 # b的第2个元素改为 -10
>>> b
array([ 3, 4, -10, 6])
>>> a # 则a的第5个元素也是 -10
array([ 0, 1, 2, 3, 4, -10, 6, 7, 8, 9])
3. 使用整数序列(列表或者numpy数组),以整数序列中每个元素为下标。不和原数组共享数据空间。
>>> x = np.arange(10, 1, -1)
>>> x
array([10, 9, 8, 7, 6, 5, 4, 3, 2])
>>> x[[3, 3, 1, 8]] #组成新的数组;下标可重复
array([7, 7, 9, 2])
>>> y = x [np. array([3, 3, -3, 8])] #下标可以为负
>>> y
array([7, 7, 4, 2])
>>> y[2] = 100
>>> y
array([ 7, 7, 100, 2])
>>> x # x 并未改变
array([10, 9, 8, 7, 6, 5, 4, 3, 2])
>>> x[[3, 5, 1]] = -1, -2, -3 #除非直接修改X中的元素
>>> x
array([10, -3, 8, -1, 6, -2, 4, 3, 2])
4. 使用Numpy布尔数组(不能使用布尔列表)
当使用布尔数组b作为下标存取数组x中的元素时,将收集x中所有在b中对应下标为True的元素。b和x的shape必须一致。使用布尔数组作为下标获得的数组不和原数组共享数据空间。
>>> x = np.arange(5, 0, -1)
>>> x
array([5, 4, 3, 2, 1])
>>> x[np.array([True, False, True, False, False])] #只有索引0和2处为True
array([5, 3])
>>> x[np.array([True, False, True, False, False])]= 88, 99
>>> x #布尔数组下标也可以用来修改数组
array([88, 4, 99, 2, 1])
>>> y
array([0.16772804, 0.81820098, 0.28888335, 0.42291986, 0.52946349,
0.64959717, 0.38833821, 0.2741533 , 0.89116668, 0.53912339])
>>> y > 0.5 # y中每个元素和0.5比较,得到一个布尔数组
array([False, True, False, False, True, True, False, False, True,
True])
>>> y[y>0.5] #这样就提取了y中所有大于0.5的元素
array([0.81820098, 0.52946349, 0.64959717, 0.89116668, 0.53912339])
这里顺便讲一下布尔数组的常用的布尔运算:
>>> x = np.array([True, False,True, False])
>>> x.any() #至少有一个元素为True,则返回True
True
>>> x.all() #所有元素都为True,才返回True
False
>>> np.array([True]) == 1
array([ True])
>>> x.sum() #可以返回True的个数(numpy 中True为 1)
2
>>> ~x # 逻辑非 NOT
array([False, True, False, True])
>>> x
array([ True, False, True, False])
>>> y
array([False, True, False, False])
>>> x + y # 逻辑或 OR
array([ True, True, True, False])
>>> x * y # 逻辑与 AND
array([False, False, False, False])
>>> x ^ y # 逻辑异或 XOR(对应元素不同,则结果的对应元素为True,否则False)
array([ True, True, True, False])
本文分享自 Python可视化编程机器学习OpenCV 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体分享计划 ,欢迎热爱写作的你一起参与!