70

给定两个ndarray

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

我正在寻找两个数组之间各自值的平均值,以便数据最终类似于:

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

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

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

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

4

4 回答 4

152

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

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

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

于 2013-08-27T09:38:52.013 回答
51
>>> 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.]])
于 2013-08-27T09:25:56.533 回答
4

使用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)

与 numpy.average 相比的优点numpy.mean是可以使用 weights 参数作为相同形状的数组:

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)

如果您使用掩码数组,请考虑使用numpy.ma.average因为numpy.average不要处理它们

于 2017-06-14T16:18:08.757 回答
0

如前所述,由于嵌套列表(二维矩阵),您的解决方案不起作用。远离 numpy 方法,如果你想使用嵌套的 for 循环,你可以尝试类似的方法:

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]]
于 2020-05-08T10:09:28.310 回答