我碰到了一行代碼使用Python的numpy的,看起來像這樣:一元運算符〜在numpy中做什麼?
~array([0,1,2,3,4,5,4,3,2,1,0,-1,-2])
它給輸出:
array([-1, -2, -3, -4, -5, -6, -5, -4, -3, -2, -1, 0, 1])
是否單目運算符(〜)採取陣列和應用 - > - (A + 1)
如果是這樣,什麼意思?
我碰到了一行代碼使用Python的numpy的,看起來像這樣:一元運算符〜在numpy中做什麼?
~array([0,1,2,3,4,5,4,3,2,1,0,-1,-2])
它給輸出:
array([-1, -2, -3, -4, -5, -6, -5, -4, -3, -2, -1, 0, 1])
是否單目運算符(〜)採取陣列和應用 - > - (A + 1)
如果是這樣,什麼意思?
克里斯·魯茨」的評論是正確的。
它看起來像它原來A到 - (A + 1),因爲在許多現代計算機,負數表示爲相應的正整數的Two's Complement,其中數從減去2^(bit length)
(這是「兩個位長度的權力」,而不是「兩個獨佔或位長度」)。
在這樣的系統中,-1將被表示爲全1。 當然,這樣將一個數字,它按位負的總和,所以我們必須在那裏
a + ~a = -1 =>
~a = -1 - a =>
~a = -(a + 1)
,你注意到了有關情況。
http://en.wikipedia.org/wiki/Bitwise_operation#NOT
爲什麼你最終負數的原因是他們是如何以二進制形式表示:
重點是能夠取數組中的值的補碼。在numpy的的情況下,它似乎是簡寫如下:
>>> map(lambda e: ~e, [0,1,2,3,4,5,4,3,2,1,0,-1,-2])
[-1, -2, -3, -4, -5, -6, -5, -4, -3, -2, -1, 0, 1]
的〜是ones' complement運營商,如果你與整數使用它可以在任何的Python程序中使用(這不是numpy的的獨家)
我不太確定,以下行: 〜list [1,2,3] 失敗,因爲沒有爲列表定義一元運算符,所以類對象必須讓它們像任何其他運算符一樣定義它們。 – Hooked 2010-08-06 21:57:15
你說得對,我沒有用列表檢查過它 – 2010-08-06 22:00:52
它似乎是按位否定,就像它在C中一樣。運算符適用於普通的Python整數(至少它對我來說是2.5中的值,也許我應該升級...) – 2010-08-06 21:47:07