2010-08-06 8 views
7

나는이처럼 보였다 파이썬 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)

만약 그렇다면 요점은 무엇입니까?

+2

C와 마찬가지로 비트 부정이있는 것으로 보입니다.이 연산자는 정상적인 파이썬 정수에 적용됩니다 (적어도 2.5에서 나를 위해 수행합니다. 아마도 업그레이드해야합니다 ...) –

답변

14

크리스 루츠 '댓글이 올바른 것입니다.

~ 그것은 그것이집니다처럼 보이는 bitwise negation operator

인으로 - (A + 1) 많은 현대 컴퓨터, 음수는 숫자가에서 제외되기 대응하는 양의 정수의 Two's Complement,로 표현되기 때문에 2^(bit length) ("2의 배타적 논리합 또는 비트 길이"가 아니라 "2의 비트 길이의 힘"입니다.).

이러한 시스템에서 -1은 모두 1로 표시됩니다. 물론 , 그래서, 그래서 우리는 당신이 눈치

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

상황을 숫자와 부정의 비트의 합을 것이다.

0

요점은 배열에서 val의 보수를 취할 수 있다는 것입니다.

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

~ 다 ones' complement 운영자이며의 int로 사용하는 경우는 (가 독점적으로 NumPy와의입니다) 어떤 파이썬 프로그램에서 사용할 수 있습니다 NumPy와의 경우는 다음과 같은 사항에 대해 속기 보인다

+0

저는 그렇게 확신하지는 않지만, ~ list [1,2,3] 단항 연산자가 목록에 정의되어 있지 않으므로 클래스 개체가 다른 연산자와 마찬가지로 정의되어야합니다. – Hooked

+0

네 말이 맞아, 나는 그것을 목록으로 검사하지 않았다. –

관련 문제