np.add(X, 2*Y, out=X)
比np.add(X, Y, out=X); np.add(X, Y, out=X)
慢得多。在现实世界中使用np.add(X, Y, out=X); np.add(X, Y, out=X)
来获得性能是否是一种实际做法?我在numpy中没有做过大量的数值计算,因此我想从那些实际研究问题的人那里了解这种差异可能是关键的
我想是的,但是在实现性能的同时,有没有其他方法可以使声明变得简单呢
Temporary copy演示临时复制的影响
Problem is that there are many other cases where such copies needs to be created and this impact the performance...
import numpy as np
import timeit
setup = """
import numpy as np
X = np.ones(100000, dtype=np.int)
Y = np.ones(100000, dtype=np.int)
"""
iterations = 100000
elepased = timeit.timeit(
stmt="np.add(X, 2*Y, out=X)",
setup=setup,
number=iterations
)
elepased / iterations * 1e6
84.75939844996901
elepased = timeit.timeit(
stmt="np.add(X, Y, out=X); np.add(X, Y, out=X)",
setup=setup,
number=iterations
)
elepased / iterations * 1e6
57.9470899971616
在Ubuntu20.04LTS上的jupyter笔记本上运行,1CPU 8核
我相信速度的提升特别来自于操作2*Y对新内存的读写操作。我已经添加了另一个场景,您只需通过将Y添加到其自身来覆盖它,这也有点快
案例1:
X、Y、2Y必须在内存中,并具有相应的读写操作
案例2:
内存中只有X和Y,但X有多个写入操作
案例3(最快):
内存中只有X和Y,但X有一个写入操作,Y有一个写入操作
正在检查共享内存-
相关问题 更多 >
编程相关推荐