Gemiddelde waarden in twee Numpy-arrays

Gegeven twee ndarrays

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

Ik ben op zoek naar het gemiddelde van de respectieve waarden tussen de twee arrays, zodat de gegevens zoiets worden als:

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

in principe zou het zoiets als

. toepassen

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

Maar ik weet niet zeker welke syntaxis ik moet gebruiken.. Alvast bedankt voor de hulp!


Antwoord 1, autoriteit 100%

U kunt een 3D-array maken met uw 2D-arrays die moeten worden gemiddeld en vervolgens het gemiddelde nemen langs axis=0met behulp van np.meanof np.average(de laatste maakt gewogen gemiddelden mogelijk):

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

Dit middelingsschema kan worden toegepast op elke (n)-dimensionale array, omdat de gemaakte (n+1)-dimensionale array altijd de originele arrays zal bevatten worden gemiddeld langs de axis=0.


Antwoord 2, autoriteit 34%

>>> 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.0
array([[1., 4.],
       [2., 3.]])

Antwoord 3, autoriteit 3%

Gebruik numpy.average

Ook numpy.averagekan met dezelfde syntaxis worden gebruikt:

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)

Het voordeel van numpy.average in vergelijking met numpy.meanis de mogelijkheid om ook de parameter weights te gebruiken als een array met dezelfde vorm:

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)

Als je gemaskeerde arrays gebruikt, overweeg dan ook om numpy.ma.averageomdat numpy.averagebehandel ze niet.


Antwoord 4

Zoals eerder gezegd, werkt uw oplossing niet vanwege de geneste lijsten (2D-matrix). Vermijd numpy-methoden en als je geneste for-loops wilt gebruiken, kun je zoiets proberen als:

old_set = [[0, 1], [4, 5]]
new_set = [[2, 7], [0, 1]]
ave_set = []
for i in range(len(old_set)):
    row = []
    for j in range(len(old_set[0])):
        row.append( ( old_set[i][j] + new_set[i][j] ) / 2 )
    ave_set.append(row)
print(ave_set) # returns [[1, 4], [2, 3]]

Other episodes