python에서 이전 결과값을 이용하여 현재 계산값을 계산할때(재귀연산) 벡터화가 가능한가요 ?

조회수 668회

안녕하세요. 임베디드만 하다가 python은 이번에 처음으로 시작하고 있습니다.

계측한 3개의 input값을 이용해서 estimation된 출력값을 구하려는 목적인데, 공식이 좀 복잡하네요. data는 csv 형태로 입력받아 pandas dataframe에 저장하여 읽어서 사용하고 있습니다.

입력값은 x1, x2, x3의 3가지이고 최종 출력값은 y입니다.

입력과 출력을 제외한 다른 변수들은 계산을 위한 임시값입니다.

이 값들은 다음과 같은 연산을 만족합니다.

a□ : 상수

    input[n] = a0 * x1[n] * x2[n]
    loss1[n] = a1 * (temp[n - 1] ** 4 - x3[n] ** 4)
    loss2[n] = a2 * x2[n] * (temp[n - 1] - x3[n])
    loss3[n] = a3 * x3[n] * (temp[n - 1] - x3[n])
    temp[n] = temp[n - 1] + (input[n] - (loss1[n] - loss2[n] - loss3[n])) * a4

    radi[n] = a5 * loss1[n] if x1[n] == 0 else a6 * input[n]
    loss4[n] = a7 * (y[n - 1] - x3[n])
    y[n] = (radi[n] - loss4[n]) * a8 + y[n - 1]

이 문제를 해결하기 위해 for loop를 사용하였으나 data의 갯수가 2971000line이 되니 값을 구하는데 속도가 너무 느리네요.

벡터화를 하면 빠르다고 들어서 벡터화를 시도 하였으나 [n-1]값이 [n]에 제대로 반영되지 않는듯한 결과가 나왔습니다.

for loop를 사용하지 않고 빠르게 계산할 수 있는 방법이 있을까요?

  • 단순 반복 산술연산이면 cython 으로 작성해서 확장모듈로 만드세요. 수백배까지 빨라질겁니다. python에서 연산작업 성능은 답이 없습니다. 정영훈 2021.4.12 12:50
  • 감사합니다. Cython 검색해서 한번 구현해봐야겠네요 . 알 수 없는 사용자 2021.4.12 13:18

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)