gpt4 book ai didi

python - 添加不同大小的二进制数组

转载 作者:太空宇宙 更新时间:2023-11-03 21:35:17 26 4
gpt4 key购买 nike

我根据数字及其每行的位长度制作了二进制数组,如果 295289042101659 每行 6 位,数字大小为 49 位,那么在数组中,它将是 6 位 X 9 行,通过代码并修改为 6 长度零填充行:

def listify(a, bit = 5):
res = []
while a:
a, b = divmod(a,2**bit)
res.append(b)
return res[::-1]

000001
000011
001001
000001
010110
011101
011110
010110
011011

由于是二进制数组,所以我使用了二进制加法代码,没有携带:

def binaryadd(one, other):
if one & other:
return False
return one | other

如果我得到一些大小为 3 的 402(0b110010010) 数组,那么如何通过从上到下的坐标在点 (2,2) 处添加到数组中,或者从下到下的 (3,6) 处添加到数组中-向上,从右到左的坐标?它应该看起来像:

000001
001111
001101
000101
010110
011101
011110
010110
011011

我是这样做的:

def array_add(one,another, point = (0,0)):
a = [a*2**point[0] for a in another[:]]
a+=[0]*point[1]
a = [0]*(len(one)-len(a))+a
res = [binaryadd(a,b) for a, b in zip(one[::-1],a[::-1])][::-1]
if not all(res):
return False
return res

最好的方法是通过修改一个列表来对列表的每个值应用二进制加法吗?

或者我误解了数组的基础知识?

最佳答案

既然您提到了 numpy 标签,您就可以使用它来获得高性能和可读的代码:

import numpy as np

def int_to_array(n,width):
v=np.zeros(64,np.uint8)
i,u,total=0,n,0
while(u):
if i%width == 0 : total += width
u,v[i],i = u//2,u%2,i+1
return v[:total][::-1].reshape(-1,width)

def add(a,b,point=(0,0)):
sx,sy = point
ex = sx+b.shape[0]
ey = sy+b.shape[1]
a[sx:ex,sy:ey] |= b

a=int_to_array(295289042101659,6)
b=int_to_array(402,3)
print(a)
print(b)
add(a,b,(2,2))
print(a)

对于:

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

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

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

关于python - 添加不同大小的二进制数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53277131/

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