我正在使用 Cython 迈出第一步,我想知道如何进一步提高性能。到目前为止,我的执行时间只有通常(仅限 python)的一半,但我认为肯定还有更多!
我知道cython -a
并且我已经输入了我的变量。但是我的函数中仍然有很多黄色。这是因为 cython 无法识别 numpy 还是我还缺少其他东西?
我正在使用 Cython 迈出第一步,我想知道如何进一步提高性能。到目前为止,我的执行时间只有通常(仅限 python)的一半,但我认为肯定还有更多!
我知道cython -a
并且我已经输入了我的变量。但是我的函数中仍然有很多黄色。这是因为 cython 无法识别 numpy 还是我还缺少其他东西?
我相信您可以通过使用 libc 中的数学函数受益,因为您在标量上调用 np.sqrt 和 np.floor。这不仅有 Python 调用开销,而且在 numpy ufunc 中有不同的代码路径用于标量和数组。所以这至少涉及一个类型切换。
我认为这不是问题,因为我已经使用官方教程进行了测试,它在每条 np.* 行上也报告为黄色,并且与您的代码一样涉及 python。
该页面末尾的第 3 点应该解释了这一点:
调用 NumPy/SciPy 函数目前有 Python 调用开销;可以通过从 Cython 直接到 C 的捷径。(但这确实需要对这些库进行一些孤立和增量的更改;请邮寄 Cython 邮件列表以获取详细信息)。