gpt4 book ai didi

python - 将整数数组转换为二进制表示矩阵

转载 作者:行者123 更新时间:2023-11-28 17:58:23 25 4
gpt4 key购买 nike

给定一个一维整数数组,例如:

[1, 0, -1]

寻找二进制表示矩阵,期望输出:

[[0 1], [0 0], [1 1]]

可能使用 np.binary_repr具有给定的固定宽度。目前 np.binary_repr 返回一个字符串并且一次只适用于一个数字。

tobin = np.vectorize(np.binary_repr)
tobin(np.arange(4))
# ['0000' '0001' '0010' '0011']

最佳答案

您可以使用 np.unpackbits :

a=np.array([-1,0,1]) # dtype is np.int32

您必须将数据输入为 np.uint8,因为这是 unpackbits 唯一支持的数据类型:

bi = np.unpackbits(a[:,None].view(np.uint8), axis=1)

原始输入数据为 32 位,因此每个输入元素获得 32 个值,相应地裁剪(记住 a 中的最小/最大值):

result = bi[:, :8]
array([[1, 1, 1, 1, 1, 1, 1, 1],
[0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 1]], dtype=uint8)

编辑:

这对于像答案中的数字这样的小数字很有效。如果需要超过 8 位,则应读取 bi 的前 8 个元素,然后读取第 16 到第 8 个元素。有点乱。

对于更通用的解决方案,最好翻转数组 View 。在解包之前裁剪会给你一些性能改进:

def int_to_bin(arr, n_bytes=1):       
# arr is 1-D
arr_ = np.fliplr(arr[:, None].view(np.uint8))[:, -n_bytes:]
return np.unpackbits(arr_, axis=1)

如果你想要,你可以进一步裁剪输出,比如说,只有 4 位。对于 int32 的一百万 arr,这大约需要 10 毫秒。

关于python - 将整数数组转换为二进制表示矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56970330/

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