gpt4 book ai didi

python - 从python中的数组中获取高阶字节

转载 作者:行者123 更新时间:2023-11-28 22:27:16 24 4
gpt4 key购买 nike

我有一个 32 位整数的 numpy 数组,我想将它转换为 16 位整数。

我可以使用 astype 轻松地做到这一点,但是它似乎总是选择 LSBytes 而我对 MSBs 感兴趣

a=np.array([65536],dtype=np.int32)

a.astype(np.uint16)
>>> array([0], dtype=uint16)

我可以通过这样先右移得到我想要的:

np.right_shift(a,16).astype(np.uint16)
>>> array([1], dtype=uint16)

但这看起来效率很低。

我已阅读有关 astype 的文档并尝试了所有转换选项,但没有任何结果符合我的要求。

最佳答案

您可以创建 32 位数组的 16 位“ View ”,然后使用切片仅查看高阶字。

例如a中,低16位包含10、11、12、13、14、15、16、17,高16位包含0、1、2、3 , 4, 5, 6, 7:

In [47]: a = np.arange(0, 8, dtype=np.int32)*2**16 + np.arange(10, 18, dtype=np.int32)

In [48]: a
Out[48]: array([ 10, 65547, 131084, 196621, 262158, 327695, 393232, 458769], dtype=int32)

b 是一个包含 16 个值的数组,其中包含 a 的高 16 位。 (这假设字节顺序是 little-endian 。)

In [49]: b = a.view(np.uint16)[1::2]

In [50]: b
Out[50]: array([0, 1, 2, 3, 4, 5, 6, 7], dtype=uint16)

因为 .view() 方法和切片不复制数组的数据,b 是与 a 相同的内存缓冲区的 View >。如果就地更改 b,您也会更改 a

请注意,这不会对数字进行四舍五入。 32 位数字 65535 的高 16 位将为 0。

此外,这可能无法按照您想要的方式处理负值。

关于python - 从python中的数组中获取高阶字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44134491/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com