我在Python中运行了几个模拟。每个模拟都有结果数据:name, time, cost, error
其中name是实际模拟的字符串,time是int变量,cost是numpy数组或每个模拟具有不同大小的列表,error是float变量。到目前为止,我总是只进行几次模拟。我将结果存储在单独的.txt文件中。但现在我需要运行多达100次模拟,我认为这是处理它的最佳时机:)。
我可以存储模拟结果,例如在字典中:
result = {"SimulationA": {"time": 458,"cost": [12.35, 1.15, 66, 85], "error": 2.45 }"SimulationB":{"time": 512,"cost": [12.35, 66], "error": 12.3 } }
如果可能,我想将所有内容写入具有以下结构的excel或csv文档:
结果示例:
你会推荐什么样的工作流程(我更喜欢简单的东西,计算时间等等并不重要)?非常感谢你的时间。
答案 0 :(得分:1)
如果模拟的顺序没有改变,为什么不将信息存储在像[[time1,cost1,error1],[time2,cost2,error2],...]这样的numpy数组中,然后使用numpy将其保存为csv文件。然后你只需要在excel中打开文件即可。
简单的代码和excel中的结果图片。您可以随心所欲地在csv文件中包含标题,如果您更喜欢所显示的格式或在随机参数中交换100和3,也可以在excel中转置数据。对于列表,这也可能是最简单的,然后将数据转换为numpy数组以保存它。
import numpy as np
data = np.random.rand(100,3)
np.savetxt('test.csv',data, delimiter=',')
答案 1 :(得分:1)
你花费的额外逗号是有问题的,所以我把它变成了管道。
result = {"SimulationA": {"time": 458,"cost": [12.35, 1.15, 66, 85], "error": 2.45 }, "SimulationB":{"time": 512,"cost": [12.35, 66], "error": 12.3 } }
keys = result.keys()
rows = [
',' + ','.join(result.keys()),
"time," + ','.join([ str(result[x]['time']) for x in keys]),
"cost," + ','.join([ '|'.join([ str(y) for y in result[x]['cost']]) for x in keys]),
"error," + ','.join([ str(result[x]['error']) for x in keys])
]
to_write = '\n'.join(rows)
with open('myfile.csv', 'w+') as f:
f.write(to_write)