question comes from here: binary array adding
通过使用numpy,为特定数字生成n宽度的二进制数组:
_doStuff()
几个答案指出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)
比np.zeros
快得多。
用于不使用numpy:
[0]*64
也许def int_a(n,width):
i, u, res = 0, n, []
while u or i%width:
if not i%width:res.insert(0,[])
u, i, v = u//2, i+1, u%2
res[0].insert(0,v)
return res
似乎是决定速度的功能,所以
list.insert
每个功能的 def int_b(n,width):
i, u, res = 0, n, []
while u or i%width:
if not i%width : res.append([])
u, i, v = u//2, i+1, u%2
res[-1].append(v)
return [r[::-1] for r in res][::-1]
是:
timeit
我的问题是:
1.即使我只需要几个重复功能,导入>>> timeit.timeit('int_a(295289042101659,6)','from __main__ import int_a', number = 100000)
2.891591438350612
>>> timeit.timeit('int_b(295289042101659,6)','from __main__ import int_b', number = 100000)
2.254217379469006
>>> timeit.timeit('int_to_array(295289042101659,6)','from __main__ import int_to_array', number = 100000)
2.1489055592011823
的工作也会更快吗?