Numpy:5位到整数(Python)



我有一个位数组。

输入:array([0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0])

我需要将其转换为整数数组,从 1 位读取 5 个无符号整数。

输出:array([1, 19, 14])

因为:(00001->110011->1901110->14(

我可以用numpy(或普通的Python(来做吗?

如果我需要 6 位到无符号整数怎么办?

改形为 Nx5 数组,并使用广播乘法和总和沿 length-5 轴减小:

temp = arr.reshape((-1, 5))
temp = temp * [16, 8, 4, 2, 1]  # you can use *= here if you don't need to preserve the input
result = temp.sum(axis=1)

这有点复杂。马拜,这是一个更好的方法。 但它有效。此解决方案没有 Numpy。


s = ""
arr = []
for n, i in enumerate(lst):
mod = n % 5
s += str(i) 
if mod == 4:
s += " "
for item in s.split():
arr.append(int(str(item), 2))
print(arr)
Output: 
[1, 14, 19]

我建议使用因子数组。使用此因子数组,您可以遍历数据并将每个块与此因子数组相乘并计算其总和(这是位模式的相互影响(

def bitToInt(data, bits):
factor_arr = np.ones(bits)
for i in range(bits):
factor_arr[0:i] = factor_arr[0:i] * 2
res = []
for i in range(int(len(data)/bits)):
chunk = data[i*bits:(i+1)*bits]
res.append(int((chunk * factor_arr).sum()))
return np.array(res)

这使 Numpy 可以使用矢量指令进行数组多重运算和块上的水平总和。

PS:可能有更好的chunk = data[i*bits:(i+1)*bits]方法

最新更新