【发布时间】:2014-10-07 13:07:07
【问题描述】:
如何在 Python 中高效地将一个 32 位整数转换为一个由四个 8 位整数组成的数组?
目前我有以下代码,超级慢:
def convert(int32_val):
bin = np.binary_repr(int32_val, width = 32)
int8_arr = [int(bin[0:8],2), int(bin[8:16],2),
int(bin[16:24],2), int(bin[24:32],2)]
return int8_arr
例如:
print convert(1)
>>> [0, 0, 0, 1]
print convert(-1)
>>> [255, 255, 255, 255]
print convert(-1306918380)
>>> [178, 26, 2, 20]
我需要在无符号 32 位整数上实现相同的行为。
另外。是否可以将其矢量化为 32 位整数的大型 numpy 数组?
【问题讨论】:
-
正常的 div/mod 操作有什么问题?
-
dtype允许您以两种不同的方式查看数组。 docs.scipy.org/doc/numpy/reference/generated/numpy.dtype.html 上有一个这样做的例子。np.dtype((np.int16, {'x':(np.int8,0), 'y':(np.int8,1)})) -
你有一个 32 位整数的 numpy 数组吗?给出您要处理的实际输入的示例。
-
我刚刚在对@hpaulj 的回答的评论中提出了这个建议。如果
x是数组,可以使用y = x.view(np.uint8).reshape(x.shape + (4,))。 -
@WarrenWeckesser 在几乎每个人都使用的 little endian 平台上,视图会给他相反的字节顺序 (
1 -> [1, 0, 0, 0]),因此在重塑视图后可能需要[:, ::-1]。但是,是的,单线绝对是解决这个问题的方法。
标签: python numpy vectorization