我正在编写一些软件来创建复杂波形(实际上是声波)作为数组。从一些原始波形(正弦波等)开始,将会有将它们组合起来以创建更复杂波的函数,以及更多将这些波组合起来的函数等。
它可能看起来像:
f(mult(sine(), env(square(), ramp()))
但要复杂得多。
这样做的一种方法是让每个函数成为一个生成器,这样整个函数树对每个元素执行一次,每个生成器每次都产生一个值。
数组可能有几百万个元素,函数树很容易就有 10 层深。发电机这样做会不会效率低得离谱?
另一种方法是让每个函数创建并返回一个完整的数组。这可能会更有效,但也有缺点(实现更困惑,计算结束前没有可用的结果,可能会占用大量内存)。
他们总是说你不应该尝试猜测 Python 的效率,但在这种情况下生成器会花费很长时间吗?
最佳答案
生成器是惰性序列。当您的序列可能很长时,只要您可以分段操作(按元素或在合理大小的 block 上),它们就非常适合使用。
这往往会减少您的内存使用峰值。只是不要通过将序列的所有元素存储在某处来破坏它。
关于python - 发电机的效率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31762188/