Какой конкретный алгоритм используется в NumPy для среднего значения массива и каков его большой O?

#python #numpy

#python #numpy

Вопрос:

Что касается специфики вопроса, я не могу сказать, поскольку это связано с работой. Я вижу некоторый работающий код, который использует NumPy для вычисления среднего значения наряду с некоторыми другими задачами, и я хочу исключить, что NumPy является источником поведения O (n ^ 2), которое я эмпирически наблюдаю при профилировании этой функции.

Мне также любопытно, как NumPy вычисляет среднее значение. Разве не должны быть реальные проблемы с числовой стабильностью при использовании среднего значения > 1 миллионов чисел с плавающей запятой?

Комментарии:

1. чтобы получить среднее значение любого набора данных, вам нужно «посетить» каждый элемент, поэтому это O (N) . Сортировка (не заставляйте меня начинать с BubbleSort !!) часто является причиной поведения O (N ^ 2)

2. Вы можете проверить его сложность, выполнив несколько собственных тестов.

3. Среднее значение — это просто сумма, деленная на количество элементов. Когда массивы становятся очень большими, скорость может упасть, потому что управление памятью становится более сложным. numpy может создавать несколько больших временных массивов при выполнении серии вычислений. O тесты лучше всего проводить, когда массивы небольшого размера.

4. @hpaulj к сожалению, данные здесь огромны. Я определенно сталкивался с понятием среднего в своих дипломах по математике, но мне интересно, делают ли они что-то более сложное для обеспечения числовой стабильности. Возможно, я ошибаюсь, когда большие числа в переменной с двойным типом начинают сталкиваться с проблемами с плавающей запятой, но здесь это меня беспокоит.

5. math.fsum Функция беспокоится о потере точности, но numpy.sum не делает ничего особенного. Если вы видите что-то отличное от масштабирования O (n), я думаю, это связано с ограничениями памяти и будет зависеть от машины и доступной оперативной памяти.