Я постоянно добавляю/удаляет кортежи в список на Python и интересуюсь средневзвешенным (а не самим списком). Поскольку эта часть вычислительно дорогая по сравнению с остальными, я хочу ее оптимизировать. Каков наилучший способ отслеживания средневзвешенного значения? Я думаю, что из двух методов:«Бегущий» средневзвешенный
- сохраняя список и вычисляя средневзвешенному каждый раз, когда он получает доступ/изменений (мой текущий подход)
- просто следить за текущие средневзвешенные и сумму все веса и изменить вес и средневзвешенное значение для каждого действия добавления/снятия
Я бы предпочел второй вариант, но меня беспокоят «ошибки с плавающей запятой», вызванные постоянным сложение/вычитание. Каков наилучший способ справиться с этим?
Можете ли вы применить масштабный коэффициент, чтобы превратить ваши числа в целые числа или что-то, что вам нравится округлять до целых чисел? Тогда у вас не будет проблем с ошибками с плавающей запятой. – mcdowella
Я не уверен, как вы связали ошибку при произвольном числе +/-. – orange
будет ошибка округления, связанная с преобразованием в целые числа, но это не будет нарастать в течение текущей суммы, потому что после округления целочисленное сложение и вычитание для обновления текущей суммы будут точными. – mcdowella