На самом деле, насколько я могу судить, документация не дает ясности сразу. Не сказать, что это невозможно сказать, но я думаю, что этот вопрос все же актуален для переполнения стека.
BlackVegetarian
1
numpy.mean: возвращает среднее значение элементов массива.
Хоакин
@joaquin: «Вычислить среднее арифметическое вдоль указанной оси». vs "Вычислить средневзвешенное значение по указанной оси."
Блендер
@ Блендер правильно. Я просто пытался сделать своего рода забавный ответ на ваш комментарий, потому что, если я последую вашим инструкциям, первое, что я прочитал в документации для numpy.mean, это numpy.mean: Возвращает среднее значение элементов массива, что забавно, если вы ищу ответ на вопрос ОП.
Хоакин
Ответы:
181
np.average принимает необязательный весовой параметр. Если он не поставляется, они эквивалентны. Взгляните на исходный код: Среднее , Среднее
Почему они предлагают две разные функции? Кажется, они должны просто предложить, np.averageтак как weightsэто уже необязательно. Кажется ненужным и служит только для запутывания пользователей.
Джефф
6
@Geoff Я бы предпочел, чтобы они генерировали NotImplementedException для «среднего», чтобы информировать пользователей о том, что среднее арифметическое не совпадает со «средним».
FooBar
27
np.mean всегда вычисляет среднее арифметическое и имеет некоторые дополнительные параметры для ввода и вывода (например, какие типы данных использовать, где разместить результат).
np.averageможет вычислить средневзвешенное значение, если weightsуказан параметр.
В дополнение к уже отмеченным различиям, есть еще одно чрезвычайно важное отличие, которое я только что обнаружил трудным путем: в отличие от него np.mean, ключевое слово np.averageне допускается dtype, что важно для получения правильных результатов в некоторых случаях. У меня очень большой массив одинарной точности, доступ к которому осуществляется из h5файла. Если я возьму среднее значение по осям 0 и 1, я получу дико неверные результаты, если не укажу dtype='float64':
К сожалению, если вы не знаете, что искать, вы не можете сказать, что ваши результаты неверны. Я никогда не буду использовать np.averageснова по этой причине, но всегда буду использовать np.mean(.., dtype='float64')для любого большого массива. Если мне нужно средневзвешенное значение, я вычислю его явно, используя произведение вектора весов и целевого массива, а затем либо, np.sumлибо np.mean, в зависимости от ситуации (также с соответствующей точностью).
Ответы:
np.average принимает необязательный весовой параметр. Если он не поставляется, они эквивалентны. Взгляните на исходный код: Среднее , Среднее
np.mean:
np.average:
источник
np.average
так какweights
это уже необязательно. Кажется ненужным и служит только для запутывания пользователей.np.mean
всегда вычисляет среднее арифметическое и имеет некоторые дополнительные параметры для ввода и вывода (например, какие типы данных использовать, где разместить результат).np.average
может вычислить средневзвешенное значение, еслиweights
указан параметр.источник
В какой-то версии numpy есть еще одно важное отличие, о котором вы должны знать:
average
не учитывайте маски, поэтому рассчитывайте среднее значение по всему набору данных.mean
учитывает маски, поэтому вычисляйте среднее значение только по немаскированным значениям.источник
np.ma.average
работает. Также есть отчет об ошибке .В вашем вызове две функции одинаковы.
average
может вычислить средневзвешенное значение, хотя.Ссылки на документы:
mean
иaverage
источник
В дополнение к уже отмеченным различиям, есть еще одно чрезвычайно важное отличие, которое я только что обнаружил трудным путем: в отличие от него
np.mean
, ключевое словоnp.average
не допускаетсяdtype
, что важно для получения правильных результатов в некоторых случаях. У меня очень большой массив одинарной точности, доступ к которому осуществляется изh5
файла. Если я возьму среднее значение по осям 0 и 1, я получу дико неверные результаты, если не укажуdtype='float64'
:К сожалению, если вы не знаете, что искать, вы не можете сказать, что ваши результаты неверны. Я никогда не буду использовать
np.average
снова по этой причине, но всегда буду использоватьnp.mean(.., dtype='float64')
для любого большого массива. Если мне нужно средневзвешенное значение, я вычислю его явно, используя произведение вектора весов и целевого массива, а затем либо,np.sum
либоnp.mean
, в зависимости от ситуации (также с соответствующей точностью).источник