Numpy入门之 存取元素

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])

原文发布于微信公众号 - Python编程 pyqt matplotlib(wsplovePython)

原文发表时间:2019-03-10

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券