Numpy布爾索引和花式索引
-
布爾索引:指的是一個(gè)由布爾值組成的數(shù)組可以作為一個(gè)數(shù)組的索引很澄,返回的數(shù)據(jù)為
True
值對(duì)應(yīng)位置的值辽话。布爾值數(shù)組長度必須和數(shù)組軸索引長度一致。#一維數(shù)組 arr1 = np.arange(5) """[0 1 2 3 4]""" bool1 = [True,False,False,True,False] arr1[bool1] array([0, 3]) #獲取到下標(biāo)0,3位置bool值為True的元素 #二維數(shù)組 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] # 獲取數(shù)組中下標(biāo)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]])""" #布爾賦值 #通過邏輯運(yùn)算,把滿足條件的值設(shè)置為指定的值(后面會(huì)詳細(xì)講到) 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]] """
-
花式索引:指的是用
整數(shù)數(shù)組
進(jìn)行數(shù)據(jù)索引筑煮。根據(jù)索引數(shù)組的值作為目標(biāo)數(shù)組的某個(gè)軸的下標(biāo)來取值。對(duì)于使用一維整型數(shù)組作為索引粤蝎,如果目標(biāo)是一維數(shù)組真仲,那么索引的結(jié)果就是對(duì)應(yīng)位置的元素;如果目標(biāo)是二維數(shù)組初澎,那么就是對(duì)應(yīng)下標(biāo)的行#這里的整數(shù)數(shù)組可以是Numpy的數(shù)組,也可以是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]] #獲取對(duì)應(yīng)下標(biāo)的行 """ array([[21, 29, 51, 93, 18], [98, 48, 61, 27, 63], [36, 43, 38, 46, 25]]) """ arr3[[-2,-1]] #使用負(fù)的索引,從尾部選擇 """ array([[36, 43, 38, 46, 25], [41, 1, 10, 56, 99]]) """ #多個(gè)索引數(shù)組 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]]) """
花式索引和切片不一樣,它總是將數(shù)據(jù)復(fù)制到一個(gè)新的數(shù)組中延柠。Q嫘!捕仔!