为什么用numpy.zeros准备变量比在循环内附加变量工作更快?

时间:2018-11-14 04:57:12

标签: python numpy

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 的工作也会更快吗?

  1. 差异是来自循环适配还是内存索引?

0 个答案:

没有答案