반복 이동 평균


13

리스트가 있다면 list라고 말하면, [9, 2, 4, 4, 5, 5, 7]이동 평균을 할 수 있습니다.

3 요소의 창 [[9], [9, 2], [9, 2, 4], [2, 4, 4], [4, 4, 5], [4, 5, 5], [5, 5, 7]]을 가져 가면 각 요소는 다음 과 같은 창으로 바뀝니다. 그리고 평균을 취하면 우리는 얻을 수 [9.0, 5.5, 5.0, 3.3333333333333335, 4.333333333333333, 4.666666666666667, 5.666666666666667]있습니다.

지금까지는 매우 간단합니다. 그러나 이것에 대해 알 수있는 한 가지는 이동 평균을 "매끄럽게"목록에 올린다는 것입니다. 그래서 이것은 질문을 제기합니다 :리스트를 "부드럽게"만들기 위해 이동 평균을 몇 번이나해야합니까?

당신의 작업

플로트 목록, 정수 창 크기 및 플로트가 제공되면 플로팅보다 표준 편차를 줄이기 위해 이동 평균을 몇 번이나 가져야하는지 출력합니다. 모르는 사람들을 위해 표준 편차는 일련의 데이터가 얼마나 부드럽 지 않고 다음 공식으로 계산할 수 있는지 측정합니다.

stddev

예를 들어, 우리의 이전 목록의 최대 STDDEV 사용하여 .5우리가 얻을, 8반복이 다음과 같이 :

[9.0, 5.5, 5.0, 3.3333333333333335, 4.333333333333333, 4.666666666666667, 5.666666666666667]
[9.0, 7.25, 6.5, 4.6111111111111116, 4.2222222222222223, 4.1111111111111107, 4.8888888888888893]
[9.0, 8.125, 7.583333333333333, 6.1203703703703702, 5.1111111111111107, 4.3148148148148149, 4.4074074074074074]
[9.0, 8.5625, 8.2361111111111107, 7.2762345679012341, 6.2716049382716044, 5.1820987654320989, 4.6111111111111107]
[9.0, 8.78125, 8.5995370370370363, 8.024948559670781, 7.2613168724279831, 6.2433127572016458, 5.3549382716049374]
[9.0, 8.890625, 8.7935956790123466, 8.4685785322359397, 7.9619341563786001, 7.1765260631001366, 6.2865226337448554]
[9.0, 8.9453125, 8.8947402263374489, 8.7175997370827627, 8.4080361225422955, 7.8690129172382264, 7.141660951074531]
[9.0, 8.97265625, 8.9466842421124824, 8.8525508211400705, 8.6734586953208357, 8.3315495922877609, 7.8062366636183507]

의 stdev로 끝납니다 0.40872556490459366. 당신은 방금 출력했습니다 8.

그러나 캐치가 있습니다.

대답은 음수가 아니어도됩니다! 초기 목록이 이미 최대 stddev를 충족하는 경우 "뒤로 이동"하고 이동 평균을 취소하고 목록이 최대 stddev를 충족 할 수있는 반복 횟수를 확인해야합니다. 초기 n데이터 포인트 의 창을 잘라 내고 삭제하지 않기 때문에 이동 평균을 반전시키기에 충분한 데이터가 있습니다.

예를 들어, 목록 [9.0, 8.99658203125, 8.9932148677634256, 8.9802599114806494, 8.9515728374598496, 8.8857883675880771, 8.7558358356689627](이전 예제에서 3 개의 추가 이동 평균을 가져옴)과 동일한 창 크기와 최대 stddev로 시작하면 -3대부분 이동 평균을 되돌릴 수 있기 때문에 출력됩니다 3.

합리적인 I / O 형식은 괜찮습니다.

이것은 이므로 바이트 단위의 가장 짧은 코드가 승리합니다!

테스트 사례

[9, 2,  4,  4,  5,  5,  7], 3, .5 -> 8
[9, 2,  4,  4,  5,  5,  7], 3, .25 -> 9
[9.0, 8.99658203125, 8.9932148677634256, 8.9802599114806494, 8.9515728374598496, 8.8857883675880771, 8.7558358356689627], 3, .5 -> -3
[1000, 2,  4,  4,  5,  5,  7], 7, .25 -> 13
[1000.0, 999.98477172851563, 999.96956668760447, 999.95438464397, 999.90890377378616, 999.83353739825293, 999.69923168916694], 4, 7 -> -6


답변:


1

볼프람-236

지금은 꽤 어색하지만 적어도 작동합니다.

f[x_,w_,c_]:=Module[{l=Length,d=Sqrt@CentralMoment[#,2]&,n,a,b,t,r},n=Length@x;a=Normalize/@LowerTriangularize@Array[Boole[Abs[#1-#2]<w]&,{n,n}]^2;{b,t,r}=If[d@x>c,{a,d@#>c&,l@#-1&},{Inverse@a,d@#<c&,-l@#+2&}];r@NestWhileList[b.#&,x,t]]

236 바이트f[x_,w_,c_]:=Module[{l=Length,d=Sqrt@CentralMoment[#,2]&,n,a,b,t,r},n=Length@x;a=Normalize/@LowerTriangularize@Array[Boole[Abs[#1-#2]<w]&,{n,n}]^2;{b,t,r}=If[d@x>c,{a,d@#>c&,l@#-1&},{Inverse@a,d@#<c&,-l@#+2&}];r@NestWhileList[b.#&,x,t]]
계산기 계산기
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.