【发布时间】:2019-08-02 11:15:45
【问题描述】:
EDIT2:正如@ShadowRanger 所指出的,这是一种 Numpy 现象,而不是 Python。但是,当在 Python 中使用列表推导式进行计算时(所以 x+y 变为 [a+b for a,b in zip(x,y)]),那么所有算术运算仍然需要同样长的时间(尽管是 Numpy 的 100 倍以上)。但是,当我在实际模拟中使用整数除法时,它们运行得更快。
所以主要问题仍然存在:即使在 Python 中,为什么这些测试表明整数除法并不比常规除法快?
EDIT1:版本:Python 3.5.5、Numpy 1.15.0。
似乎在 PythonNumpy 中,整数除法更多比常规除法(整数)昂贵,这是违反直觉的。测试时,我得到了这个:
setup_string = 'import numpy as np;\
N=int(1e5);\
x=np.arange(1,N+1, dtype=int);\
y=np.arange(N, dtype=int);'
加法 (+) ~ 0.1s
timeit("x+y", setup=setup_string, number=int(1e3))
0.09872294100932777
减法 (-) ~ 0.1s
timeit("x-y", setup=setup_string, number=int(1e3))
0.09425603999989107
乘法 (*) ~ 0.1s
timeit("x*y", setup=setup_string, number=int(1e3))
0.09888673899695277
除法 (/) ~ 0.35s
timeit("x/y", setup=setup_string, number=int(1e3))
0.3574664070038125
整数除法 (//) ~ 1s (!)
timeit("x//y", setup=setup_string, number=int(1e3))
1.006298642983893
任何想法为什么会发生这种情况?为什么整数除法不快?
【问题讨论】:
-
这不是关于 Python 的 整数除法,而是关于
numpy的。一种重要的区别。 -
你能指定你使用的是哪个版本的Python和
numpy吗? -
Python 3.5.5, Numpy 1.15.0 另外,@ShadowRanger 你可能会在这里找到一些东西。在我的模拟中,我使用列表推导(因为我需要舍入整数除法)然后转换回 numpy 数组,所以 Python 和整数除法的 Numpy 实现之间可能存在(很大)差异。我会尽快测试。
-
@ShadowRanger 即使在 Python 中执行此操作,整数除法似乎也不会更快(请参阅更新的问题)
-
另外,
setup_string不是一个有效的字符串。
标签: python performance numpy integer-division integer-arithmetic