我很困惑,为什么test2
在以下代码中不比test1
快:
import timeit
setup = """
import numpy as np
A = np.ones((220, 220, 220))
B = np.ones((220, 220, 220))
class store:
def __init__(self):
self.C = np.empty((220, 220, 220))
Z = store()
"""
test1 = """
C = A + B
"""
test2 = """
Z.C = A + B
"""
print timeit.timeit(test1, setup, number=1000)
print timeit.timeit(test2, setup, number=1000)
给了我:
40.9241290092
40.7675480843
我认为因为Z.C
是预先分配的内存,每次添加A+B
并且需要一个地方来存储它时,开销就会减少,即在幕后调用malloc
或者更少类似的东西。我错过了什么?
答案 0 :(得分:0)
分配是一项快速操作,增加费用更高:
In [7]: %timeit np.empty((220, 220, 220))
1000 loops, best of 3: 472 µs per loop
In [8]: u= np.ones((220, 220, 220))
In [9]: %timeit u+u
10 loops, best of 3: 73.5 ms per loop
因此,即使您正确更新了数组(Z.C[:]= A+B
),在您的情况下也不会赢得很多(约0.5%)。