728x90
반응형
# Move average

import random
import matplotlib.pyplot as plt

# 50 ~ 60의 랜덤으로 생성되는 1000개의
# 샘플의 실시간으로 평균필터된 값을 구하고 (샘플이 추가될때마다)
# 최종 평균을 구하세요

sampleCount = 20
samples = []

meanPlots = []
samplePlots = []

for i in range(sampleCount):
    val = random.uniform(50, 60)
    samples.append(val)
    # print('val: ', val)
    
    # 평균값을 계산
    # 총합 / 갯수 = 평균
    mean = sum(samples) / len(samples)
    
    # t = 0
    # for v in samples:
    #     t += v
        
    # mean = t / len(samples)
    
    # 평균필터
    # mean = val
    print(f'[{i+1}] mean: ', mean)
    
    samplePlots.append([val])
    meanPlots.append([mean])
    
print('result mean: ', mean)

plt.plot(samplePlots, color = 'b', label = 'sample')
plt.plot(meanPlots, color = 'r', label = 'mean', alpha=0.5)
plt.legend(loc='best')
plt.show()

import random
import matplotlib.pyplot as plt


# **평균필터필터

# 평균값을 계산
# 평균 = 총합 / 갯수



# 배치식
# 값의 단위와 양이 매우 크다면 누적된 값의 공간이 커야지만
# 손실없이 보관 및 계산이 가능해서 기본적으로 큰 메모리 공간을 필요로함

# b mb gb tb pb 1000조
# 32bit == 4byte * x
# [1,2,3,4,5,6,7,8,9,10]

samples = []
def meanFilterForBatch():
    global samples

    # t = 0
    # for s in samples:
    #     t += s
    # # mean = t / (i+1)
    # mean = t / len(samples)

    # sum([1,2,3,4,5,6,7,8,9,10])
    mean = sum(samples) / len(samples)

    return mean

# 2^32, 11111111111111111111111111111111 => 0
total = 0
def meanFilterForBatch2(sample, numOfSamples):
    global total

    total += sample
    mean = total / numOfSamples
    return mean


# 50.0~51.0의 랜덤으로 생성되는 최대 1000개의 
# 샘플이 모이는 동안 실시간으로 평균필터된 값을 구하고 (샘플이 추가될때마다)
# 최종 평균을 구하세요


# 3Dof 6Dof 9Dof
sampleCount = 100

meanPlots = []
samplePlots = []

# 평균필터
# for i in range(sampleCount):

#     # 50.0, 50.999999999999
#     sample = random.uniform(50, 51)
#     print(f'[{i+1}] sample: ', sample)
    
#     samples.append(sample)
#     mean = meanFilterForBatch()

#     # total += sample
#     # mean = meanFilterForBatch2()
#     # print(f'[{i+1}] mean: ', mean)

#     samplePlots.append([sample])
#     meanPlots.append([mean])


# 이동평균필터
# 평균을 낼 샘플의 갯수를 지정된 수의 최신 원소들로만 유지하고 해당 원소들로 평균을 구함
x = 10
n = 0
for i in range(sampleCount):

    # 매 10의 배수 횟차마다 n을 증가
    if i % 10 == 0:
        n += 1

    sample = random.uniform(50 + n, 51 + n)
    print(f'[{i+1}] sample: ', sample)

    samples.append(sample)

    # 이동평균

    if len(samples) > x:
        samples.pop(0)
        # samples = samples[1:]

    mean = meanFilterForBatch()

    # total += sample
    # mean = meanFilterForBatch2()

    # print(f'[{i+1}] mean: ', mean)

    samplePlots.append([sample])
    meanPlots.append([mean])



print('result mean: ', mean)

plt.plot(samplePlots, color = 'b', label = 'sample')
plt.plot(meanPlots, color = 'r', label = 'mean', alpha=0.5)
plt.legend(loc = 'best')
plt.show()
728x90
반응형

'Language > Python' 카테고리의 다른 글

Context Manager  (0) 2023.11.08
lambda expression  (0) 2023.04.16
Basic Qt Code  (0) 2022.10.26
Basic Qt  (0) 2022.10.26
[PySide] Hello World  (0) 2022.10.26

+ Recent posts