日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

python布尔系列_python数据分析类库系列-Numpy之布尔型索引

發(fā)布時間:2024/10/14 python 84 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python布尔系列_python数据分析类库系列-Numpy之布尔型索引 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

我們了解了如何使用索引進(jìn)行切片以及選擇 ndarray 元素。當(dāng)我們知道要選擇的元素的確切索引時,這些方法很有用。但是,在很多情況下,我們不知道要選擇的元素的索引。例如,假設(shè)有一個 10,000 x 10,000 ndarray,其中包含從 1 到 15,000 的隨機(jī)整數(shù),我們只想選擇小于 20 的整數(shù)。這時候就要用到布爾型索引。

來看這樣一個例子,假設(shè)我們有一個用于存儲數(shù)據(jù)的數(shù)組以及一個存儲姓名的數(shù)組(含有重復(fù)項)。在這里,我將使用numpy.random中的randn函數(shù)生成一些正態(tài)分布的隨機(jī)數(shù)據(jù):

names = np.array(['Bob', 'Joe', 'Will', 'Bob', 'Will', 'Joe', 'Joe'])

data =np.random.randn(7,4)

data

out

array([[-0.53447574, 0.44543995, 0.20598584, 1.08783591],

[-0.77863291, 0.19012144, -0.57628278, 2.21230602],

[-1.94785822, 1.75829325, 0.76416317, -0.26749686],

[ 1.55128542, -0.48229173, -0.10775036, 1.82210628],

[-0.75344013, 1.49328631, 0.19576227, -1.37773471],

[-0.28998065, -0.54219643, 0.44587161, -1.17333163],

[ 2.28372601, 0.9102604 , -0.15811983, 1.16763758]])

假設(shè)每個名字都對應(yīng)data數(shù)組中的一行,而我們想要選出對應(yīng)于名字"Bob"的所有行。跟算術(shù)運(yùn)算一樣,數(shù)組的比較運(yùn)算(如==)也是矢量化的。因此,對names和字符串"Bob"的比較運(yùn)算將會產(chǎn)生一個布爾型數(shù)組:

names == "Bob"

out

array([ True, False, False, True, False, False, False])

********************************************************

data[names =='Bob'] #True為選擇,False為不選擇

out

array([[7., 7., 7., 7.],

[7., 7., 7., 7.]])

布爾型數(shù)組的長度必須跟被索引的軸長度一致。此外,還可以將布爾型數(shù)組跟切片、整數(shù)(或整數(shù)序列,稍后將對此進(jìn)行詳細(xì)講解)混合使用:

data[names == 'Bob']

out

array([[-1.33599022, 0.04700321, 0.98537189, 0.33183721],

[-0.2225323 , 0.10320653, 1.24636372, -0.38496333]])注意:如果布爾型數(shù)組的長度不對,布爾型選擇就會出錯,因此一定要小心。

下面的例子,我選取了names == 'Bob'的行,并索引了列:

data[names == 'Bob', 2:]

out

array([[ 0.98537189, 0.33183721],

[ 1.24636372, -0.38496333]])

********************************************************

data[names == 'Bob', 3]

out

要選擇除"Bob"以外的其他值,既可以使用不等于符號(!=),也可以通過~對條件進(jìn)行否定:

names != "Bob"

out

array([False, True, True, False, True, True, True])

********************************************************

data[~(names == 'Bob')]

out

array([[ 0.04813526, 0.481971 , -0.23318465, -0.08770203],

[ 2.39572745, -0.03834795, -0.49294046, -0.76124253],

[-0.30962763, 0.3454903 , 0.30120547, 0.82999187],

[-1.46354427, -1.00491798, 0.4574028 , 1.26923957],

[ 0.46142634, 1.55466835, -0.54772161, -0.65769753]])

~操作符用來反轉(zhuǎn)條件很好用

cond = names == 'Bob'

data[~cond]

out

array([[ 0.04813526, 0.481971 , -0.23318465, -0.08770203],

[ 2.39572745, -0.03834795, -0.49294046, -0.76124253],

[-0.30962763, 0.3454903 , 0.30120547, 0.82999187],

[-1.46354427, -1.00491798, 0.4574028 , 1.26923957],

[ 0.46142634, 1.55466835, -0.54772161, -0.65769753]])

選取這三個名字中的兩個需要組合應(yīng)用多個布爾條件,使用&(和)、|(或)之類的布爾算術(shù)運(yùn)算符即可:

mask = (names == "Bob") | (names == "Will" )

mask

out

array([ True, False, True, True, True, False, False])

********************************************************

data[mask]

out

array([[-1.33599022, 0.04700321, 0.98537189, 0.33183721],

[ 2.39572745, -0.03834795, -0.49294046, -0.76124253],

[-0.2225323 , 0.10320653, 1.24636372, -0.38496333],

[-0.30962763, 0.3454903 , 0.30120547, 0.82999187]])

通過布爾型索引選取數(shù)組中的數(shù)據(jù),將總是創(chuàng)建數(shù)據(jù)的副本,即使返回一模一樣的數(shù)組也是如此。注意:Python關(guān)鍵字and和or在布爾型數(shù)組中無效。要使用&與|。

通過布爾型數(shù)組設(shè)置值是一種經(jīng)常用到的手段。為了將data中的所有負(fù)值都設(shè)置為0,我們只需:

data[data < 0] = 0

data

out

array([[0. , 0.04700321, 0.98537189, 0.33183721],

[0.04813526, 0.481971 , 0. , 0. ],

[2.39572745, 0. , 0. , 0. ],

[0. , 0.10320653, 1.24636372, 0. ],

[0. , 0.3454903 , 0.30120547, 0.82999187],

[0. , 0. , 0.4574028 , 1.26923957],

[0.46142634, 1.55466835, 0. , 0. ]])

通過一維布爾數(shù)組設(shè)置整行或列的值也很簡單:

data[names != 'Joe'] = 7

data

out

array([[7. , 7. , 7. , 7. ],

[0.04813526, 0.481971 , 0. , 0. ],

[7. , 7. , 7. , 7. ],

[7. , 7. , 7. , 7. ],

[7. , 7. , 7. , 7. ],

[0. , 0. , 0.4574028 , 1.26923957],

[0.46142634, 1.55466835, 0. , 0. ]])

后面會看到,這類二維數(shù)據(jù)的操作也可以用pandas方便的來做。

下期我們將分享Numpy的花式索引,如果喜歡請點(diǎn)贊收藏,您的支持是我最大的動力,謝謝大家,共同進(jìn)步。掃描二維碼關(guān)注全部內(nèi)容

總結(jié)

以上是生活随笔為你收集整理的python布尔系列_python数据分析类库系列-Numpy之布尔型索引的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。