[Numpy] 数组索引和切片

美图欣赏2022/07/27

如果数组是一维的,那么索引和切片就是和Python的列表是一样的

import numpy as np
# 一维数组的索引和切片
arr1 = np.arange(10) # array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
## 进行索引操作
arr1[5] # 5
arr1[-1] # 9
## 进行切片操作
arr1[4:6] # array([4, 5])
arr1[::2] # array([0, 2, 4, 6, 8])

如果数组是多维的(这里以二维数组为例),那么在中括号[]中,给两个值,两个值是通过逗号,分隔的,逗号前面的是行,逗号后面的列;如果中括号[]中只有一个值,那么就是代表行

arr2

注意:arr2是随机的

import numpy as np
# 多维数组的索引和切片
arr2 = np.random.randint(0,10,size=(4,6))

# 获取第0行数据
arr2[0] # array([8, 8, 0, 0, 9, 2])

# 获取第1,2行数据
'''
array([[9, 2, 9, 7, 5, 0],
       [6, 0, 8, 3, 4, 7]])
'''
arr2[1:3] 

# 获取多行数据 例0,2,3行数据
'''
array([[8, 8, 0, 0, 9, 2],
       [6, 0, 8, 3, 4, 7],
       [2, 7, 6, 5, 0, 9]])
'''
arr2[[0,2,3]] 

# 获取第2行第1列数据
arr2[2,1] # 0

# 获取多个数据 例第1行第4列、第2行第5列数据
arr2[[1,2],[4,5]] # array([5, 7])

# 获取多个数据 例第1、2行的第4、5列的数据
'''
array([[5, 0],
       [4, 7]])
'''
arr2[1:3,4:6]

# 获取某一列数据 例第1列的全部数据
arr2[:,1] # array([8, 2, 0, 7])

# 获取多列数据 例第1、3列的全部数据
'''
array([[8, 0],
       [2, 7],
       [0, 3],
       [7, 5]])
'''
arr2[:,[1,3]] 

扩展补充知识: 布尔索引

布尔索引通过布尔运算(如:比较运算符)来获取符合指定条件的元素的数组

import numpy as np
# 生成1-24的4行6列的二维数组
arr = np.arange(24).reshape((4,6))
# array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
arr[arr < 10]
# array([ 0,  1,  2,  3,  4, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,23])
arr[(arr < 5)|(arr > 10)]

例1:获取大于5的元素 

import numpy as np
arr = np.array([[0,1,2],[3,4,5],[6,7,8],[9,10,11]])
# 获取大于5的元素
# array([ 6,  7,  8,  9, 10, 11])
arr[arr >  5]

例2:过滤NaN 

import numpy as np 
arr = np.array([np.nan,1,2,np.nan,3,4,5])
# array([1., 2., 3., 4., 5.])
arr[~np.isnan(arr)]

例3:使用&连接两个条件,筛选大于5且小于10的元素  

import numpy as np
arr = np.array([[0,1,2],[3,4,5],[6,7,8],[9,10,11]])
# 筛选大于5且小于10的元素
# array([6, 7, 8, 9])
arr[(arr > 5) & (arr < 10)]

提示

1.布尔索引是通过相同数据上的True和False来进行提取的

2.提取条件可以为一个或多个,当提取条件为多个时使用&代表且,使用|代表或

3.当提取条件为多个时,每个条件要使用圆括号括起来 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值