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

问题描述 投票:0回答:2

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

我正在使用一个转换函数映射到数组的每一个元素,但它是非常慢的!所以,有如::Np.array,我需要将它们转换成适当的二补码。

所以,有了e.g.这个数组,我想做一些操作。

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

我想对数组进行一些操作,以得到包含以下内容的数组

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

任何提示感激不尽.d.

python numpy twos-complement
2个回答
3
投票
>>> 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)

0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.