gpt4 book ai didi

python - 如何有效地将 numpy.int8 数组就地转换为值移位的 numpy.uint8 数组?

转载 作者:太空狗 更新时间:2023-10-29 21:22:56 26 4
gpt4 key购买 nike

我有一个大的带符号字节的 numpy 数组 (dtype int8)。它包含整个范围内的值 -128 到 +127。我想通过向每个元素添加 128 将有效地转换为无符号字节数组 (dtype uint8),这样 -128 → 0、0 → 128、+127 → 255,等等所以当然结果仍然适合一个无符号字节。

给定正确数值结果的简单元素加法,但除了源数组之外还使用两倍的内存(dtype int16)创建结果数组,即使只有结果元素的低字节是需要。

>>> import numpy
>>> a = numpy.array( [-128, -1, 0, 1, 127 ], dtype=numpy.int8)
>>> b = a + 128
>>> b
array([ 0, 127, 128, 129, 255], dtype=int16)

有没有办法控制结果数组的dtypeuint8

就地修改值并将数据“转换”为新类型的替代方法,如下所示:

>>> for i in xrange(0, 5):
... if a[i] < 0:
... a[i] -= 128
... elif a[i] >= 0:
... a[i] += 128
...
>>> a
array([ 0, 127, -128, -127, -1], dtype=int8)
>>> a.view(dtype=numpy.uint8)
array([ 0, 127, 128, 129, 255], dtype=uint8)

对于使用 Python 进行转换的大型数组来说,空间效率更高,但时间成本非常高。

我如何就地快速进行这种转换?

最佳答案

import numpy as npa = np.array([-128, -1, 0, 1, 127], dtype=np.int8)a = a.view(np.uint8)a += 128print a# -> array([  0, 127, 128, 129, 255], dtype=uint8)

这不会创建任何副本,并且所有操作都是就地的。

编辑:首先转换为 uint 更安全——定义了无符号环绕。EDIT2:s/numpy/np/g;

关于python - 如何有效地将 numpy.int8 数组就地转换为值移位的 numpy.uint8 数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7715406/

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