Valeurs moyennes dans deux tableaux Numpy

Étant donné deux ndarrays

old_set = [[0, 1], [4, 5]]
new_set = [[2, 7], [0, 1]]

Je cherche à obtenir la moyenne des valeurs respectives entre les deux tableaux afin que les données finissent quelque chose comme:

end_data = [[1, 4], [2, 3]]

Fondamentalement, il s'appliquerait quelque chose comme

for i in len(old_set):
    end_data[i] = (old_set[i]+new_set[i])/2

Mais je ne sais pas quelle syntaxe utiliser.. Merci pour l'aide à l'avance!

31
demandé sur Forde 2013-08-27 13:23:45

3 réponses

>>> import numpy as np
>>> old_set = [[0, 1], [4, 5]]
>>> new_set = [[2, 7], [0, 1]]
>>> (np.array(old_set) + np.array(new_set)) / 2
array([[1, 4],
       [2, 3]])
28
répondu falsetru 2013-08-27 09:25:56

Vous pouvez créer un tableau 3D contenant vos tableaux 2D à moyenner, puis la moyenne le long de axis=0 en utilisant np.mean ou np.average (ce dernier permet des moyennes pondérées):

np.mean( np.array([ old_set, new_set ]), axis=0 )

Ce schéma de moyenne peut être appliqué à n'importe quel tableau (n)-dimensionnel, car le tableau (n+1)-dimensionnel créé contiendra toujours les tableaux originaux à moyenner le long de son axis=0.

81
répondu Saullo G. P. Castro 2018-05-14 12:42:17

En utilisant numpy.average

Aussi numpy.average peut être utilisé avec la même syntaxe:

import numpy as np
a = np.array([np.arange(0,9).reshape(3,3),np.arange(9,18).reshape(3,3)])
averaged_array = np.average(a,axis=0)

L'avantage de numpy.moyenne par rapport à numpy.mean est la possibilité d'utiliser également le paramètre weights comme un tableau de la même forme:

weighta = np.empty((3,3))    
weightb = np.empty((3,3))       
weights = np.array([weighta.fill(0.5),weightb.fill(0.8) ])
np.average(a,axis=0,weights=weights)

Si vous utilisez masqué tableaux pensez également à utiliser numpy.ma.average parce que numpy.average ne pas traiter avec eux.

3
répondu G M 2017-06-14 16:18:08