两个Numpy数组中的平均值

For*_*rde 43 python arrays numpy

鉴于两个ndarray

old_set = [[0, 1], [4, 5]]
new_set = [[2, 7], [0, 1]]
Run Code Online (Sandbox Code Playgroud)

我想要获得两个数组之间相应值的平均值,以便数据最终得到如下结果:

end_data = [[1, 4], [2, 3]]
Run Code Online (Sandbox Code Playgroud)

基本上它会应用类似的东西

for i in len(old_set):
    end_data[i] = (old_set[i]+new_set[i])/2
Run Code Online (Sandbox Code Playgroud)

但我不确定使用什么语法..提前感谢您的帮助!

Sau*_*tro 102

您可以创建一个3D阵列,其中包含要平均的2D阵列,然后axis=0使用平均值np.meannp.average(后者允许加权平均值):

np.mean( np.array([ old_set, new_set ]), axis=0 )
Run Code Online (Sandbox Code Playgroud)

这种平均方案可以应用于(n)任何维数组,因为创建的(n+1)维数组将始终包含要沿其平均的原始数组axis=0.

  • 优秀使用numpy功能. (3认同)
  • 我真的很喜欢这个选项.特别是,如果你想忽略nan:`np.nanmean(np.array([old_set,new_set]),axis = 0)` (3认同)
  • 你也可以使用`np.mean(np.array([i for bigArr]),轴= 0)将数据扩展到任意数量的数组.其中`bigArr`由许多一个1D数组组成. (3认同)

fal*_*tru 36

>>> 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.]])
Run Code Online (Sandbox Code Playgroud)

  • 除非您使用的是Python 3或使用`from __future__ import division`,否则应除以2.0以确保使用真正的除法而不是整数除法. (13认同)

G M*_*G M 5

使用numpy.average

numpy.average可以使用相同的语法:

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)
Run Code Online (Sandbox Code Playgroud)

相比之下,numpy.average 的优点numpy.mean是可以将权重参数用作相同形状的数组:

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)
Run Code Online (Sandbox Code Playgroud)

如果您使用屏蔽数组,请考虑也使用,numpy.ma.average因为numpy.average不处理它们