【发布时间】:2018-03-23 23:38:40
【问题描述】:
numpy.divide 和 Python 斜杠 / 运算符有什么异同?据我所知,它们的行为相同,都实现了元素划分。 Numpy documentation 提到:
numpy.divide(x1, x2) ... 在数组广播方面相当于 x1 / x2。 ...
暗示 np.divide(x1, x2) 不完全等同于 x1 / x2。 我运行了以下 sn-p 来比较它们的速度:
import numpy as np
import time
a = np.random.rand(10000, 10000)
b = np.random.rand(10000, 10000)
tic = time.time()
c = a / b
toc = time.time()
print("Python divide took: ", toc - tic)
tic = time.time()
c = np.divide(a, b)
toc = time.time()
print("Numpy divide took: ", toc - tic)
似乎 Python 分界线通常运行得更快,这让我相信 Numpy 分界线实现了一些额外的花里胡哨。
非常感谢任何帮助!
【问题讨论】:
-
这似乎纯粹是一个没有正确基准测试的工件。如果我使用
timeit,则a/b为540ms,np.divide(a, b)为539ms。如果我使用你幼稚的基准测试,无论我先做哪个都需要更长的时间。 -
是的。显然,您的 CPU 缓存了其中一个结果。
-
或者可能只是分配——第一个需要为数组分配空间;第二个重用刚刚释放的空间。但我会挖掘源代码以确保它们是相同的。
标签: python numpy division elementwise-operations