使用循环进行初始化会导致更快的时间

时间:2017-03-10 09:30:30

标签: python numpy vectorization

我有这段代码:

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=100init_matr的速度会更快。

1 个答案:

答案 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