Итак, я пишу класс, который будет вычислять простую скользящую среднюю по списку цен. Он вычисляет среднее значение каждого N числа цен без расчета первых N-1 дней. Это то, что у меня есть:Python простой скользящий средний класс на основе
class Simplemovingaverage():
def __init__(self, Nday, list_of_prices):
self._Nday = Nday
self._list_of_prices = list_of_prices
def calculate(self):
for i in range(len(self._list_of_prices)):
if i < self._Nday:
average = 0
elif i == self._Nday:
average = sum(self._list_of_prices[:self._Nday])/self._Nday
else:
average = sum(self._list_of_prices[i-self._Nday:i])/self._Nday
print(average)
Я проверил это, делая объект класса на оболочке 'x = Simplemovingaverage(3, [1,2,3,4,5,6,7,8,9,10])'
, а затем делает метод CALCulate по «x.calculate» на выходе я получил:
0
0
0
2.0
3.0
4.0
5.0
6.0
7.0
8.0
Таким образом, из моего списка чисел его единственный расчет до 7,8,9, последний номер должен быть 9, потому что это среднее значение 8,9,10, а также должно быть только 3 нуля, так как N равно 3. Это вывод I 'ищу:
0
0
2.0
3.0
4.0
5.0
6.0
7.0
8.0
9.0
Зачем нужен класс для этого? Кажется, что нет объекта с состоянием или поведением, которое вы моделируете; это просто вычисление. Это будет работать лучше как функция. – user2357112
Посмотрите на использование объекта [deque] (http://docs.python.org/2/library/collections.html#collections.deque) для скользящих средних. Он оптимизирован для добавления и всплытия на любом конце, а также фиксированных размеров (если необходимо) – mhlester
Просто используйте [move_average recipe] (http://docs.python.org/2/library/collections.html#deque-recipes) из 'collections.deque'. –