【发布时间】:2011-09-20 11:41:03
【问题描述】:
我才意识到这样做
x.real*x.real+x.imag*x.imag
比做起来快三倍
abs(x)**2
其中 x 是一个 numpy 复数数组。为了代码的可读性,我可以定义一个函数,如
def abs2(x):
return x.real*x.real+x.imag*x.imag
仍然比 abs(x)**2 快得多,但它是以函数调用为代价的。是否可以像我在 C 中使用宏或使用 inline 关键字那样内联这样的函数?
【问题讨论】:
-
如果你需要这种优化,你可能需要使用 Cython 之类的东西。
-
PyPy 来救援!
-
如果你关心这么小的优化,你应该使用 C,而不是 python。 python 与速度无关,真的。
-
您是否尝试过对语句和函数调用进行计时,看看是否真的有区别?
-
除了非常正确和重要的(说真的,听他们说),请注意,由于 Python 的动态特性,唯一可能发生内联的时间是在运行时。这是 PyPy 所做的众多优化之一(尽管它还没有远程完整的 NumPy;但至少它正在开发中),并且 PyPy 在惯用的 Python 代码上效果最好,而不是在编写用于去除微小的暂停执行开销。
标签: python optimization inline-functions