如何高效地将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
.
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
.