我有这段代码:
def init_matr(r, c):
matr = np.random.randint(2, size=(r, c))
return matr
def init_matr_loop(r, c):
matr = np.zeros((r,c))
for idx,i in enumerate(matr):
matr[idx][0] = np.random.randint(2)
matr[idx][1] = np.random.randint(2)
return matr
使用数据:
r = 1000
c = 1000
%timeit -n 1000 init_matr(r, c)
%timeit -n 1000 init_matr_loop(r, c)
我收到了:
1000 loops, best of 3: 8.17 ms per loop
1000 loops, best of 3: 556 µs per loop
我可以看到循环版本更快!
为什么?
如果尺寸较小,r=100, c=100
,init_matr
的速度会更快。
答案 0 :(得分:1)
matr = np.random.randint(2, size=(r, c))
创建r * c随机值
设置2 * r值:
for idx,i in enumerate(matr):
matr[idx][0] = np.random.randint(2)
matr[idx][1] = np.random.randint(2)
for idx,i in enumerate(matr):
会对matr
行进行迭代,因此您只需将2列matr
设置为随机值。
对于足够大的c
,尽管是迭代的,第二个可能会更快。但他们没有做同样的事情,所以比较它们没有多大意义。
您是否有机会尝试使用np.enumerate
?