gpt4 book ai didi

python - Numpy:创建具有指数衰减的正弦波

转载 作者:太空狗 更新时间:2023-10-30 02:51:07 25 4
gpt4 key购买 nike

我是一个 Numpy 新手。

我想创建一个包含一百万个数字的数组,它有一个振幅呈指数衰减的正弦波。

换句话说,我希望每个单元格 n 的值为 sin(n) * 2 ** (-n * factor)

最有效的方法是什么?

最佳答案

Numpy 有自己的 sin功能,它可以高效地完成您想要完成的任务。效率低下的主要原因是求幂 2 ** (-n * factor) .

但是,numpy 在其 exp 中确实具有有效的幂运算功能。所以我们可以将基数转换为e使用 exp通过使用

exp(-n * factor * log(2))

哪里log是另一个 numpy 函数并使用基数 e .通过在 numpy 在其矢量化中设置的循环之外进行尽可能多的计算,您可以进一步加快代码速度。换句话说,你首先设置标量

newfactor = -np.log(2) * factor

并设置您的 x使用 x = np.linspace(0, 10, 1000000) 的数组或类似的东西。那么你的y数组是用

创建的
y = np.sin(x) * np.exp(newfactor * x)

现在y是一个数组,所有计算值都对应于 x 中的值数组。

Numpy 自己进行循环,对于当前的技术来说非常高效。我的实验表明,以这种方式求幂所用时间不到 np.power(2, -factor * x) 的 1/5。或 2 ** (-x * factor)np.exp2(-x * factor)拿。查看整个表达式,对于 x一个长度为一百万的数组,我的代码一共需要29.2 ms执行。 @ComplicatedPhenomenon的代码,看起来确实不错,一共占用81.3 ms执行,几乎是原来的 3 倍。 (感谢@ComplicatedPhenomenon 指出我的代码中的错误——我已经更正了它,现在它似乎运行良好。)

关于python - Numpy:创建具有指数衰减的正弦波,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57124500/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com