gpt4 book ai didi

python - numpy - (np.add(X, Y, out=X); np.add(X, Y, out=X)) 在 np.add(X, 2*Y, out=X)

转载 作者:行者123 更新时间:2023-12-04 03:44:09 30 4
gpt4 key购买 nike

问题

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.947089899971616

环境

在 Ubuntu 20.04LTS,1CPU 8 核上的 jupyter notebook 中运行

  • numpy 1.19.2
  • Python 3.8.5(默认,2020 年 9 月 4 日,07:30:14)[GCC 7.3.0]

最佳答案

我认为速度的提升特别来自操作2*Y 对新内存的读写操作。我添加了另一种情况,您可以通过将 Y 添加到自身来简单地覆盖它,这也更快一些。

案例一:

X, Y, 2Y 必须在内存中,并有相应的读写。

Y = np.ones((10000,))
X = np.zeros((10000,))

#Case 1:
np.add(X, 2*Y, out=X) #Double Y, store somewhere, and add to X
13.3 µs ± 929 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

案例二:

只有X和Y在内存中,但是X有多次写操作。

Y = np.ones((10000,))
X = np.zeros((10000,))

#Case 2:
np.add(X, Y, out=X) #Add to X
np.add(X, Y, out=X) #Add to X again
12.8 µs ± 830 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

案例 3(最快):

只有X和Y在内存中,但是X有1次写操作,Y有1次写操作。

Y = np.ones((10000,))
X = np.zeros((10000,))

#Case 3:
np.add(Y, Y, out=Y) #double Y
np.add(X, Y, out=X) #then add to X
12.2 µs ± 136 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

检查共享内存-

#2*Y is a brand new array in memory
print(np.shares_memory(Y, 2*Y))

#np.add(Y, Y, out=Y) Adding Y to itself shares memory
print(np.shares_memory(Y, np.add(Y, Y, out=Y)))
False
True

关于python - numpy - (np.add(X, Y, out=X); np.add(X, Y, out=X)) 在 np.add(X, 2*Y, out=X),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65453999/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com