2013-10-14 3 views
4

이론적 인 파워 스펙트럼 밀도에서 시계열을 생성합니다.파이썬에서 효율적인 코사인 계산

기본적 시공간 내 기능 a_n 주어진 w_nphiPSD 값이다 X(t) = SUM_n sqrt(a_n) + cos(w_n t + phi_n) 의해 주어진 것은 어떤 임의의 위상이다. 현실적인 timeseries를 얻으려면, 나는 2^25 모드를 합산해야하며, 나의 t은 물론 2^25 크기가 있습니다.

파이썬으로 할 경우, 몇 주가 걸릴 것입니다 ...
속도를 높이는 방법이 있습니까? 어떤 벡터 계산처럼? dataCOS은 SQRT의 a_n이다 w = w 및 random.uniform 랜덤 위상 시프트 피를 나타낸다

t_full = np.linspace(0,1e-2,2**12, endpoint = False) 
signal = np.zeros_like(t_full) 
for i in range(w.shape[0]): 
     signal += dataCOS[i] * np.cos(2*np.pi* t_full * w[i] + random.uniform(0,2*np.pi)) 

+1

'w_n' 임의의 값입니까, 아니면'w_n = 2 * np.pi * n/T'와 같은 것입니까? – Jaime

답변

6

넌 각도를 계산 outer 함수를 사용하고 사용자의 신호를 획득 한 축 합계 수 벡터화 방법 : 당신이 C 루프에 비해 느린 속도로 인터프리터는 루프 것이다 파이썬 for 루프를 사용할 때 때문에

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) 

이 빠릅니다. 이 경우 numpy 외부 연산을 사용하면 C 루프 속도에서 곱셈과 합계를 계산할 수 있습니다.

+0

좋아, 어쩌면 내 질문은 내가 alreads arrys (t 배열) 비트를 사용하여 충분히 명확하지 않았다 비트 수십억 모드의 합계, cosines의 timesample 각 coniting 중! – user2003965

+3

@ user2003965 질문을 조금 더 명확하게 할 수 있다면 좋을 것입니다. 기꺼이 할 수있는 프로세스의 예를 들려 주시겠습니까? –

+0

좋아, 이것은 나에게 같은 결과를주는 것 같지만, 이것이 왜 더 빠른지 내게 설명해 주시겠습니까? – user2003965