如何高效地将numpy.array满14位二进制数转换成python中对应的二进制补码?

how to efficiently convert numpy.array full of 14 bit binary numbers into corresponding two's complement in python?

np.array 中存储了超过一百万个数字。这些是直接的二进制代码,我需要将它们转换成适当的二进制补码。

我实际上正在使用一个转换函数的映射到数组的每个元素,但是速度非常慢!

所以,例如:

np.array((127,126,2,1,0,255,254,130,129,128))

我想做一些操作以获得包含

的数组

(127,126,2,1,0,-1,-2,-126,-127,-128)

任何提示表示赞赏 .d.

>>> a = numpy.array((127,126,2,1,0,255,254,130,129,128), dtype=numpy.uint8)
>>> a
array([127, 126,   2,   1,   0, 255, 254, 130, 129, 128], dtype=uint8)
>>> a.astype(numpy.int8)
array([ 127,  126,    2,    1,    0,   -1,   -2, -126, -127, -128], dtype=int8)

>>> a = numpy.array((127,126,2,1,0,255,254,130,129,128), dtype=numpy.uint16)
>>> a
array([127, 126,   2,   1,   0, 255, 254, 130, 129, 128], dtype=uint16)
>>> a.astype(numpy.int8)
array([ 127,  126,    2,    1,    0,   -1,   -2, -126, -127, -128], dtype=int8)

一种选择是将14位数字存储在uint16或int16中,视情况而定,然后向左移动2位以捕获符号位,作为相反的数据类型查看并向左移动2位对,即 data_out = numpy.uint16(data_in<<2).astype(numpy.int16)>>2.