前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Numpy入门之 存取元素

Numpy入门之 存取元素

作者头像
用户6021899
发布2019-08-14 16:11:49
9490
发布2019-08-14 16:11:49
举报

Numpy数组的元素存取方法有以下几种:

  1. 通过索引: >>> a = np.arange(10) >>> a array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) >>> a[5] 5 >>> a[5]=99 >>> a array([ 0, 1, 2, 3, 4, 99, 6, 7, 8, 9])

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])
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-03-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python可视化编程机器学习OpenCV 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档