Что делает унарный оператор ~ в numpy? - PullRequest
7 голосов
/ 07 августа 2010

Я наткнулся на строку кода, используя numpy Python, который выглядел так:

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

И он вывел:массив и применить A -> - (A + 1)

Если так, какой смысл?

Ответы [ 4 ]

14 голосов
/ 07 августа 2010

Комментарий Криса Лутца правильный.

~ является побитовым оператором отрицания

Похоже, что он поворачивает А в - (А + 1), потому что на многих современных компьютерах отрицательные числа представляются как Дополнение к двум соответствующего положительного целого числа, где число вычитается из 2^(bit length) (это "двукратная степень битовой длины", а не "две эксклюзивные или битовая длина" ...).

В такой системе -1 будет представлено как все. Конечно, как и сумма числа и его побитового отрицательного значения, мы имеем ситуацию, когда

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

как вы заметили.

4 голосов
/ 07 августа 2010

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

Причина, по которой вы получаете отрицательные числа, заключается в том, как они представлены в двоичной форме:

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

2 голосов
/ 07 августа 2010

~ является оператором добавок и, если вы используете с int, его можно использовать в любой программе на Python (он не только numpy)

0 голосов
/ 07 августа 2010

Смысл в том, чтобы иметь возможность взять дополнение вейлов в массиве.В случае 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]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...