numpy取反操作符和Boolean類型與0-1表示方式
numpy取反操作符和Boolean類型與0-1表示
numpy中取反運(yùn)算符~可以將Boolean類型值取反,這在使用boolean類型數(shù)組選擇數(shù)組中固定元素時(shí)十分有用。
import numpy as np
a=np.array([0,0,1,1]).astype("bool")
b=np.arange(4)
print("b\n",b)
# b
# [0 1 2 3]
c=b[a]
print("c\n",c)
# c
# [2 3]
print("~a\n",~a)
# ~a
# [ True True False False]
c_=b[~a]
print("c_\n",c_)
# c_
# [0 1]
numpy中的0-1表示和Boolean類型具有一致性
loser_winner = np.array([1, 0, 0, 1, 0, 1])
if [0, 0, 1] == [False, False, True]:
print("1")
else:
print("0")
# 1
print(~loser_winner.astype(np.bool))
# [ True False False False True False]
mutation_idx = [True, True, True, False, False, False]
loser_winner[mutation_idx] = ~loser_winner[mutation_idx].astype(np.bool)
print("loser_winner", loser_winner, "loser_winner[mutation_idx]", loser_winner[mutation_idx])
# loser_winner [0 1 1 1 0 1] loser_winner[mutation_idx] [0 1 1]
Python按位取反運(yùn)算符~解析
Python的按位取反運(yùn)算符~的解釋是:
對數(shù)據(jù)的每個(gè)二進(jìn)制位取反,即把1變?yōu)?,把0變?yōu)?。~x 類似于 -x-1。
如a =61= 0b0011 1101,按位取反后的結(jié)果是:0b1100 0010=194,
可是Python中運(yùn)算結(jié)果并非如此,
輸出的~a的結(jié)果是:~a=62
這是怎么回事呢?
計(jì)算機(jī)中的符號數(shù)有三種表示方法,即原碼、反碼和補(bǔ)碼。三種表示方法均有符號位和數(shù)值位兩部分,符號位都是用0表示“正”,用1表示“負(fù)”,而數(shù)值位,三種表示方法各不相同。
在計(jì)算機(jī)系統(tǒng)中,數(shù)值一律用補(bǔ)碼來表示和存儲。原因在于,使用補(bǔ)碼,可以將符號位和數(shù)值域統(tǒng)一處理;同時(shí),加法和減法也可以統(tǒng)一處理。
另外,求負(fù)整數(shù)的補(bǔ)碼,將其對應(yīng)正數(shù)二進(jìn)制原碼表示所有位取反(包括符號位,0變1,1變0)后加1
這里用括號來表示符號位,0表示正數(shù),1表示負(fù)數(shù)。
- a=61=(0)0b0011 1101,正數(shù)補(bǔ)碼
- ~a=(1)0b1100 0010,負(fù)數(shù)補(bǔ)碼,符號位為1表示這個(gè)代表一個(gè)負(fù)數(shù),我們要知道其表示的數(shù)值。
對應(yīng)負(fù)數(shù)原碼到補(bǔ)碼的轉(zhuǎn)換過程:
(1)數(shù)值部分先減一:0b1100 0001
(2)數(shù)值部分取反:0b0011 1110,數(shù)值部分62
加上符號則~a =-62= (1)0b0011 1110,負(fù)數(shù)原碼
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
詳解將Python程序(.py)轉(zhuǎn)換為Windows可執(zhí)行文件(.exe)
這篇文章主要介紹了詳解將Python程序(.py)轉(zhuǎn)換為Windows可執(zhí)行文件(.exe),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-07-07
pytorch實(shí)現(xiàn)圖像識別(實(shí)戰(zhàn))
這篇文章主要介紹了pytorch實(shí)現(xiàn)圖像識別(實(shí)戰(zhàn)),文章主要分享實(shí)現(xiàn)代碼,但也具有一定的參考價(jià)值,需要的小伙伴可以才可以一下,希望對你有所幫助2022-02-02
Python collections.deque雙邊隊(duì)列原理詳解
這篇文章主要介紹了Python collections.deque雙邊隊(duì)列原理詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-10-10
python3實(shí)現(xiàn)單目標(biāo)粒子群算法
這篇文章主要為大家詳細(xì)介紹了python3實(shí)現(xiàn)單目標(biāo)粒子群算法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-11-11
解決Python報(bào)錯No module named Crypto問題
這篇文章主要介紹了解決Python報(bào)錯No module named“Crypto”問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-06-06
使用python怎樣產(chǎn)生10個(gè)不同的隨機(jī)數(shù)
這篇文章主要介紹了使用python實(shí)現(xiàn)產(chǎn)生10個(gè)不同的隨機(jī)數(shù)方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-07-07

