【发布时间】:2019-07-31 01:43:57
【问题描述】:
sn-p 来自 Python Cookbook。共有三个文件。
sample.pyx
cimport cython
@cython.boundscheck(False)
@cython.wraparound(False)
cpdef clip(double[:] a, double min, double max, double[:] out):
if min > max:
raise ValueError('min must be <= max')
if a.shape[0] != out.shape[0]:
raise ValueError('input and output arrays must be the same size!')
for i in range(a.shape[0]):
if a[i] < min:
out[i] = min
elif a[i] > max:
out[i] = max
else:
out[i] = a[i]
setup.py
from distutils.core import setup
from Cython.Build import cythonize
setup(ext_modules=cythonize("sample.pyx"))
main.py 作为测试文件
b = np.random.uniform(-10, 10, size=1000000)
a = np.zeros_like(b)
since = time.time()
np.clip(b, -5, 5, a)
print(time.time() - since)
since = time.time()
sample.clip(b, -5, 5, a)
print(time.time() - since)
令人惊讶的是,Numpy 的运行速度比 Cython 代码快 2 倍,而本书则相反。 我机器上的性能是:
0.0035216808319091797
0.00608062744140625
这是为什么呢?
提前谢谢你。
【问题讨论】:
-
如果您将性能数据包含在记录中,那就太好了。
-
在代码上运行分析器,看看它在哪里花费时间。
-
如果可能的话,请你给我更多关于探查器的细节吗?@KlausD.
-
我个人使用kernprof 进行逐行分析。
标签: python performance numpy optimization cython