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

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

你可能感兴趣的:(Numpy布尔索引和花式索引)