字典中每个列表的第n个元素的平均值

时间:2014-03-11 02:34:24

标签: python-2.7 numpy dictionary

D_values = {}
Average = [ ]
for path in glob("F:\Thermal Motion\*.txt"):
    t, x, y = np.loadtxt(path, unpack=True)
    D_values[path] = [((x[i]/.115 - x[0]/.115)**2 + (y[i]/.155 - y[0]/.155)**2)**0.5
                      for i in range(len(x))]
    print D_values[path]                   

当我打印D_values时,它会给出一堆列表。我需要做的是找到所有数组中每个第n个元素的平均值。我只是不知道我将如何引用字典中的特定列表。就像D_values[path]给出列表

一样
[1,2,3,4,...]
[23,234,43,...]
[5,6,7,...]

我想在Average[(1,23,5,...) (2,234,7,...)...]

中创建一个数组

1 个答案:

答案 0 :(得分:1)

这基本上是通过np.mean为您完成的。但是您希望首先将数据转换为数组,而不是dict。您可以这样说:

D_values = []  # an empty list, not dict
Average = []
for path in glob("F:\Thermal Motion\*.txt"):
    t, x, y = np.loadtxt(path, unpack=True)
    #append to list instead of dict:
    D_values.append([((x[i]/.115 - x[0]/.115)**2 + (y[i]/.155 - y[0]/.155)**2)**0.5
                      for i in range(len(x))])
print D_values

然后你有D_values列表。现在您可以使用np.mean

np.mean(D_values, axis=0)

axis=0参数告诉函数沿第一轴(列)平均。

因此,如果D_values[[1,2,3], [23,234,43], [5,6,7]],那么您的意思是:[ 9.66666667, 80.66666667, 17.66666667]

Protip:您不必使用列表解析来构建D_values,因为txy是数组。你可以这样做:

D_values = []  # an empty list, not dict
Average = []
for path in glob("F:\Thermal Motion\*.txt"):
    t, x, y = np.loadtxt(path, unpack=True)
    #append to list instead of dict:
    D_values.append((((x - x[0])/.115)**2 + ((y - y[0])/.155)**2)**0.5)
print D_values