Numpy布尔索引和花式索引

Numpy布尔索引和花式索引

  1. 布尔索引:指的是一个由布尔值组成的数组可以作为一个数组的索引,返回的数据为True值对应位置的值。布尔值数组长度必须和数组轴索引长度一致

    #一维数组 
    arr1 = np.arange(5)
    """[0 1 2 3 4]"""
    bool1 = [True,False,False,True,False]
    arr1[bool1]
    array([0, 3]) #获取到下标0,3位置bool值为True的元素
    
    #二维数组
    arr2 = np.random.rand(5,4)
    """
    [[0.46997479 0.30359067 0.55125259 0.63899705]
     [0.37201402 0.53077412 0.62129647 0.18914937]
     [0.41954877 0.68191221 0.75394428 0.18423583]
     [0.70372303 0.6412821  0.12537964 0.04018929]
     [0.56545976 0.88056762 0.08840744 0.33807558]]"""
    bool1 = [True,False,False,True,False]
    arr2[bool1] # 获取数组中下标0,3位置bool值为True的行
    """
    [[0.46997479 0.30359067 0.55125259 0.63899705]
     [0.70372303 0.6412821  0.12537964 0.04018929]]
    """
    
    #布尔索引和切片组合
    arr2[bool1, 2] 
    # array([0.55125259, 0.12537964]) 
    arr2[bool1, 1:4] 
    """array([[0.30359067, 0.55125259, 0.63899705],
           [0.6412821 , 0.12537964, 0.04018929]])"""
    
    #布尔赋值
    #通过逻辑运算,把满足条件的值设置为指定的值(后面会详细讲到)
    bool3 = arr2>0.5
    arr2[bool3] = 1
    """
    [[0.46997479 0.30359067 1.         1.        ]
     [0.37201402 1.         1.         0.18914937]
     [0.41954877 1.         1.         0.18423583]
     [1.         1.         0.12537964 0.04018929]
     [1.         1.         0.08840744 0.33807558]]
    """
    
  2. 花式索引:指的是用整数数组进行数据索引。根据索引数组的值作为目标数组的某个轴的下标来取值。对于使用一维整型数组作为索引,如果目标是一维数组,那么索引的结果就是对应位置的元素;如果目标是二维数组,那么就是对应下标的行

    #这里的整数数组可以是Numpy的数组,也可以是Python的列表
    arr3=np.random.randint(100,size=(7,5))
    arr3
    """
    array([[21, 29, 51, 93, 18],
           [16, 79, 63, 55, 40],
           [98, 48, 61, 27, 63],
           [37,  3, 48, 54, 69],
           [92, 78, 92, 93, 17],
           [36, 43, 38, 46, 25],
           [41,  1, 10, 56, 99]])
    """
    # 使用花式索引,有顺序
    arr3[[0,2,5]] #获取对应下标的行
    """
    array([[21, 29, 51, 93, 18],
           [98, 48, 61, 27, 63],
           [36, 43, 38, 46, 25]])
    """
    arr3[[-2,-1]] #使用负的索引,从尾部选择
    """
    array([[36, 43, 38, 46, 25],
           [41,  1, 10, 56, 99]])
    """
    
    #多个索引数组
    arr3[[0,3,5],[2,3,4]] #取出(0,2),(3,3),(5,4)元素
    """
    array([51, 54, 25])
    """
    
    arr3[[1,5,6,2]][:,[0,3,1,2]]
    """
    array([[16, 55, 79, 63],
           [36, 46, 43, 38],
           [41, 56,  1, 10],
           [98, 27, 48, 61]])
    """
    
    

    花式索引和切片不一样,它总是将数据复制到一个新的数组中。!!!

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 目录布尔索引花式索引 (Fancy Indexing)二者的联系? 申明:本文中提到的数组就是特指numpy的数据...
    大聖Jonathan阅读 23,125评论 7 12
  • 创建数组对象 axis为轴,n维数组有n个轴,axis的取值为1,2,3,4...,n 1、数组属性 arr.as...
    nono辉阅读 554评论 0 0
  • 第1章 Numpy数组对象 Numpy中的多维数组称为ndarray,是Numpy中最常见的数组对象 ndarra...
    惑也阅读 394评论 0 5
  • 核心数据结构 ndarray 多维数组, 注意 n维的顺序 ndarray的属性 ndarray.ndim数组的...
    咚咚强阅读 581评论 0 0
  • 1.0 php 服务器脚本语言,适合开发web,实现功能,开源免费,可执行在各种平台支持所有的数据库 2.0 ph...
    微笑你的天下阅读 1,702评论 0 0

友情链接更多精彩内容