高效计算python中的余弦

时间:2013-10-14 15:51:16

标签: python arrays performance numpy cosine

我从理论功率谱密度中生成一些时间序列。

基本上,我在时空中的函数由X(t) = SUM_n sqrt(a_n) + cos(w_n t + phi_n)给出,其中a_n是给定PSDw_n的{​​{1}}的值是一些随机阶段。为了获得真实的时间序列,我必须总结phi个模式,我的2^25当然也是t的大小。

如果我使用python执行此操作,则需要几周时间...
有什么方法可以加快速度吗?像一些矢量计算?

2^25

其中dataCOS是sqrt a_n,w = w,random.uniform表示随机相移phi

1 个答案:

答案 0 :(得分:6)

您可以使用outer函数计算角度,然后沿一个轴求和,以矢量化方式获取信号:

import numpy as np

t_full = np.linspace(0, 1e-2, 2**12, endpoint=False)
thetas = np.multiply.outer((2*np.pi*t_full), w)
thetas += 2*pi*np.random.random(thetas.shape)

signal = np.cos(thetas)
signal *= dataCOS

signal = signal.sum(-1)

这更快,因为当您使用Python for循环时,与C循环相比,解释器将以较慢的速度循环。在这种情况下,使用numpy外部操作可以计算C循环速度下的乘法和总和。