Na verdade, a documentação não deixa imediatamente claro, até onde eu posso ver. Não estou dizendo que é impossível dizer, mas acho que essa pergunta é válida para Stack Overflow da mesma forma.
BlackVegetable
1
numpy.mean: retorna a média dos elementos da matriz.
Joaquin
@joaquin: "Calcule a média aritmética ao longo do eixo especificado." vs "Calcular a média ponderada ao longo do eixo especificado."?
Blender
@Blender certo. Eu estava apenas tentando dar uma resposta engraçada ao seu comentário, porque se eu seguir suas instruções, a primeira coisa que li nos documentos para numpy.mean é numpy.mean: retorna a média dos elementos da matriz que são engraçados se você estiver procurando a resposta para a pergunta do OP.
Joaquin
Respostas:
180
np.average usa um parâmetro de peso opcional. Se não for fornecido, eles são equivalentes. Dê uma olhada no código-fonte: Média , Média
Por que eles oferecem duas funções diferentes? Parece que eles deveriam apenas oferecer np.averageuma vez que weightsjá é opcional. Parece desnecessário e serve apenas para confundir os usuários.
Geoff
6
@ Geoff Eu preferiria que eles lançassem uma NotImplementedException para "média", para informar aos usuários que a média aritmética não é idêntica à "média".
FooBar
26
np.mean sempre calcula uma média aritmética e tem algumas opções adicionais para entrada e saída (por exemplo, quais tipos de dados usar, onde colocar o resultado).
np.averagepode calcular uma média ponderada se o weightsparâmetro for fornecido.
Além das diferenças já observadas, há outra diferença extremamente importante que acabei de descobrir da maneira mais difícil: ao contrário np.mean, np.averagenão permite a dtypepalavra - chave, que é essencial para obter resultados corretos em alguns casos. Eu tenho uma matriz de precisão única muito grande que é acessada a partir de um h5arquivo. Se eu pegar a média ao longo dos eixos 0 e 1, obtenho resultados extremamente incorretos, a menos que eu especifique dtype='float64':
Infelizmente, a menos que você saiba o que procurar, não pode necessariamente dizer que seus resultados estão errados. Eu nunca usarei np.averagenovamente por esse motivo, mas sempre utilizarei np.mean(.., dtype='float64')em qualquer matriz grande. Se eu quiser uma média ponderada, eu a computarei explicitamente usando o produto do vetor de ponderação e a matriz de destino e, em seguida, ou np.sumou np.mean, conforme apropriado (com precisão apropriada também).
Respostas:
np.average usa um parâmetro de peso opcional. Se não for fornecido, eles são equivalentes. Dê uma olhada no código-fonte: Média , Média
np.mean:
np.average:
fonte
np.average
uma vez queweights
já é opcional. Parece desnecessário e serve apenas para confundir os usuários.np.mean
sempre calcula uma média aritmética e tem algumas opções adicionais para entrada e saída (por exemplo, quais tipos de dados usar, onde colocar o resultado).np.average
pode calcular uma média ponderada se oweights
parâmetro for fornecido.fonte
Em alguma versão do numpy há outra diferença importante que você deve estar ciente:
average
não leve em consideração as máscaras; portanto, calcule a média de todo o conjunto de dados.mean
leva em conta máscaras, então calcule a média somente sobre valores não mascarados.fonte
np.ma.average
funciona. Além disso, há um relatório de bug .Na sua invocação, as duas funções são iguais.
average
pode calcular uma média ponderada.Links do documento:
mean
eaverage
fonte
Além das diferenças já observadas, há outra diferença extremamente importante que acabei de descobrir da maneira mais difícil: ao contrário
np.mean
,np.average
não permite adtype
palavra - chave, que é essencial para obter resultados corretos em alguns casos. Eu tenho uma matriz de precisão única muito grande que é acessada a partir de umh5
arquivo. Se eu pegar a média ao longo dos eixos 0 e 1, obtenho resultados extremamente incorretos, a menos que eu especifiquedtype='float64'
:Infelizmente, a menos que você saiba o que procurar, não pode necessariamente dizer que seus resultados estão errados. Eu nunca usarei
np.average
novamente por esse motivo, mas sempre utilizareinp.mean(.., dtype='float64')
em qualquer matriz grande. Se eu quiser uma média ponderada, eu a computarei explicitamente usando o produto do vetor de ponderação e a matriz de destino e, em seguida, ounp.sum
ounp.mean
, conforme apropriado (com precisão apropriada também).fonte