Étant donné un tableau de 2x3, je veux calculer la moyenne sur axis=0
, mais seulement compte tenu des valeurs qui sont supérieures à 0.moyenne conditionnelle avec numpy
Donc, étant donné le tableau
[ [1,0],
[0,0],
[1,0] ]
Je veux la sortie être
# 1, 0, 1 filtered for > 0 gives 1, 1, average = (1+1)/2 = 1
# 0, 0, 0 filtered for > 0 gives 0, 0, 0, average = 0
[1 0]
Mon code actuel est
import numpy as np
frame = np.array([ [1,0],
[0,0],
[1,0] ])
weights=np.array(frame)>0
print("weights:")
print(weights)
print("average without weights:")
print((np.average(frame, axis=0)))
print("average with weights:")
print((np.average(frame, axis=0, weights=weights)))
Cela me donne
weights:
[[ True False]
[False False]
[ True False]]
average without weights:
[ 0.66666667 0. ]
average with weights:
Traceback (most recent call last):
File "C:\Users\myuser\project\test.py", line 123, in <module>
print((np.average(frame, axis=0, weights=weights)))
File "C:\Users\myuser\Miniconda3\envs\myenv\lib\site-packages\numpy\lib\function_base.py", line 1140, in average
"Weights sum to zero, can't be normalized")
ZeroDivisionError: Weights sum to zero, can't be normalized
Je ne comprends pas cette erreur. Qu'est-ce que je fais de mal et comment puis-je obtenir la moyenne pour toutes les valeurs supérieures à zéro le long de axis=0
? Merci!
'0, 0, 0 filtré pour> 0 donne 0, 0, 0 '... Non, il ne fonctionne pas. Pouvez-vous donner une description plus précise de la façon dont vous voulez gérer le cas où aucun élément positif n'est trouvé? Est-ce que le résultat doit toujours être 0? Le résultat devrait-il être la moyenne de tous les éléments? Devrait-on imputer une autre valeur? – user2357112
Une moyenne pondérée est calculée comme la somme des produits des nombres et poids moyens, divisée par la somme des poids. Puisque vos poids pour la deuxième colonne totalisent 0 (les trois sont «Faux»), la division n'est pas possible. – DyZ
Et les commentaires sur la solution affichée? – Divakar