我正在试图找出一组预测的平均值(我的模型创建的0到1之间的值。但是,预测值会移动,如果有10个数据值,则预测会在一套三个像这样:
0.6825 0.7022 0.7023
0.6193 0.6410 0.6389
0.5934 0.6159 0.6145
0.5966 0.6191 0.6184
0.3331 0.3549 0.3500
0.1862 0.2015 0.1999
0.1165 0.1270 0.1267
0.1625 0.1761 0.1740
其中这些值对应的索引如下:
1 2 3
2 3 4
3 4 5
4 5 6
5 6 7
6 7 8
7 8 9
8 9 10
我正在尝试编写一个脚本,以便逐行读取输入并输出适合每个索引的平均预测值(平均两个二,三个,三个四等)这样每行就有一个:
0.6825
0.7001
etc...
但是,我不确定如何读取数据,以便我能够区分第1行中的0.6825和0.7022。我如何读取信息,以便我能够将它存储在一个连续的数组中?
就逻辑而言,我认为我可以为第一个,第二个,最后一个和倒数第二个值设置特殊情况,并为其余值运行循环。
答案 0 :(得分:2)
def linereader(fName):
with open(fName) as f:
for line in f:
yield map(float, line.split())
result = []
data = []
for i, line in enumerate(linereader('values.txt')):
data.append(line)
if i == 0:
result.append(data[0][0])
elif i == 1:
result.append((data[0][1] + data[1][0])/2)
else:
result.append((data[i-2][2] + data[i-1][1] + data[i][0])/3)
result.append((data[-2][2] + data[-2][1])/2)
result.append(data[-1][2])
print result
#[0.6825, 0.66075, 0.6455666666666667, 0.6171333333333333, 0.5222333333333333, 0.3865, 0.22266666666666668, 0.16313333333333332, 0.12685000000000002, 0.174]
答案 1 :(得分:1)
我会这样做:
index:values
字典(使用defaultdict
)例如:
from collections import defaultdict
from pprint import pprint
aggregated = defaultdict(list)
with open('predictions.txt') as data:
for i, line in enumerate(data, start=1):
values = [float(v) for v in line.split()]
for offset, value in enumerate(values):
index = i + offset
aggregated[index].append(value)
averaged = {}
for index, values in aggregated.items():
averaged[index] = sum(values) / float(len(values))
pprint(averaged)
输出:
{1: 0.6825,
2: 0.66075,
3: 0.6455666666666667,
4: 0.6171333333333333,
5: 0.5222333333333333,
6: 0.3865,
7: 0.22266666666666668,
8: 0.16313333333333332,
9: 0.1514,
10: 0.174}
另请参阅defaultdict
和enumerate