[英]Average values in two Numpy arrays
给定两个 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
但我不确定要使用什么语法.. 提前感谢您的帮助!
您可以创建一个包含要平均的 2D 数组的 3D 数组,然后使用np.mean
或np.average
沿axis=0
进行平均(后者允许加权平均值):
np.mean( np.array([ old_set, new_set ]), axis=0 )
这种平均方案可以应用于任何(n)
维数组,因为创建的(n+1)
维数组将始终包含要沿其axis=0
平均的原始数组。
>>> 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.]])
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
是也使用的权重参数作为相同形状的阵列的可能性:
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
不处理它们。
如前所述,由于嵌套列表(二维矩阵),您的解决方案不起作用。 远离 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]]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.