我是一名学生,对用Python编写代码非常陌生。我使用Dymola已经有几年了,现在我使用的是Dymola/Python接口,您可以通过该接口从Python内部操作Dymola(用于构建股票模拟、全局敏感度分析等)。
现在,Dymola总是以一种高效的不可读的数据结构生成.mat文件。我想知道如何使用Python脚本将我感兴趣的变量从.mat文件导出到.csv?(我不希望将整个文件转换为.csv,因为它太大了。)
我知道一个DyMat-Package for Python应该可以完成这项工作,但要么是我不理解代码,要么是代码没有做它应该做的事情?有谁有这方面的经验吗?我可能遗漏了一些代码,这些代码定义了必须从哪个.mat文件中读取/导出、我想要哪些变量以及Result.csv文件应该存储在哪个目录中?
import csv, numpy
def export(dm, varList, fileName=None, formatOptions={}):
"""Export DyMat data to a CSV file"""
if not fileName:
fileName = dm.fileName + '.csv'
oFile = open(fileName, 'w')
csvWriter = csv.writer(oFile)
vDict = dm.sortByBlocks(varList)
for vList in vDict.values():
vData = dm.getVarArray(vList)
vList.insert(0, dm._absc[0])
csvWriter.writerow(vList)
csvWriter.writerows(numpy.transpose(vData))
oFile.close()
谢谢!
3条答案
按热度按时间k5hmc34c1#
在Dymola发行版中,有一个名为alist.exe的实用程序,它允许您以CSV格式导出许多变量。
另一种可能是将MAT文件转换为SDF格式,这是一种非常简单的HDF5解释。HDF5文件不如MAT文件紧凑,但您可以使用ZIP/GZIP/7ZIP压缩文件以减少归档存储。在Dymola发行版中,有用于读取SDF格式的MATLAB和Python脚本。
mlmc2os52#
由于它被标记为
openmodelica
,因此我提出了一个使用它的解决方案:FilterSimulationResults(“file.mat”,“file.csv”,{“x”,“y”,“z”})创建一个只包含变量x,y,z的CSV文件(如果您认为它仍然太大,可以对文件重新采样)。
vm0i2vca3#
对于小文件(<2 GB),Buildingspy(或其他Python包)几乎可以满足所有需求:https://simulationresearch.lbl.gov/modelica/buildingspy/
然而,由于当文件大于2 GB时会遇到问题(例如,对于全年的模拟),可能会使用Dymola的“alist.exe”。(OpenModelica的filterSimulationResults也会失败)
“alist.exe”似乎直到大约。一次导出100个变量,对每个变量执行一次似乎会大大减慢速度(翻译1或100行的时间几乎相同)。您可以使用如下所示的来自Python的alist.exe来促进自动化和加快速度。
这仍然不是一个快速的解决方案,但可以首先处理日期。在尝试在本地计算机上处理如此大量的数据之前,始终应该首先利用Dymola的变量选择。
希望有一天这能帮助到别人!