开发者

What does the unary operator ~ do in numpy?

I came across开发者_StackOverflow社区 a line of code using Python's numpy that looked like this:

~array([0,1,2,3,4,5,4,3,2,1,0,-1,-2])

And it gave the output:

array([-1, -2, -3, -4, -5, -6, -5, -4, -3, -2, -1,  0,  1])

Does the unary operator (~) take an array and apply A -> -(A+1)

If so, whats the point?


Chris Lutz' comment is correct.

~ is the bitwise negation operator

It looks like it turns A to -(A+1) because on many modern computers, negative numbers are represented as the Two's Complement of the corresponding positive integer, where the number is subtracted from 2^(bit length) (that's "two to the power of bit length", not "two exclusive or bit length"...).

In such a system, -1 would be represented as all ones. Of course, so would the sum of a number and its bitwise negative, so we have the situation where

a + ~a = -1        =>
    ~a = -1 - a    =>
    ~a = -(a + 1)

as you noticed.


http://en.wikipedia.org/wiki/Bitwise_operation#NOT

The reason why you end up with negative numbers is how they are represented in binary form:

http://en.wikipedia.org/wiki/Two%27s_complement


The ~ is the ones' complement operator and if you're using with ints it can be used in any python program (it's not exclusively of numpy)


The point is to be able to take the complement of the vales in an array. In the case of numpy it appears to be shorthand for the following:

>>> 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]
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜