TLDR
使用Python来管理/修改您的输入,并使用您的输出,并使用HDF5来组织/存储您的数据。尽管一开始看起来很复杂,但它仍然比SQL还要简单。
更长的答案+示例
我个人使用Python脚本和HDF5文件格式的组合来处理这种情况。Python脚本可以处理更改运行文件所必需的文本替换(并可以检查重复运行),并且通过其他脚本,您可以从程序中获取输出数据并将其放入HDF5文件中。
最容易想到的是HDF5与普通文件系统(即计算机上的目录和子目录集)大致相同,但可以很容易地扩展到大型数据集。每个目录/子目录都可以用元数据标记(在您的情况下,只是您要更改的参数或整个参数集)。当需要分析数据时,您可以根据元数据进行搜索。
这是一个简短的示例,说明了如何根据我的一些模拟数据(已经采用HDF5格式)运行,如下所示:
mydata.hdf5
|___Run01(metadata: {size:13, maxSteps:1e7, maxTime:inf})
|___Run02(metadata: {size:10, maxSteps:1e6, maxTime:inf})
|___Run03(metadata: {size:13, maxSteps:1e7, maxTime:inf})
|___Run04(metadata: {size:9, maxSteps:1e7, maxTime:inf})
mydata.hdf5
是HDF5文件,每个Runxx是一个子目录,该子目录保存给定模拟的输出数据,并用关联的元数据标记。搜索运行并返回包含所需元数据的python脚本如下所示:
import sys
import h5py #the python module that interfaces with HDF5
def GetRuns(hdfRoot, attributeValuePairs):
return [subdir for subdir in hdfRoot.values() if not(attributeValuePairs.viewitems() - dict(subdir.attrs).viewitems())]
if __name__=="__main__":
attributeValuePairs = dict(zip(sys.argv[2::2], sys.argv[3::2]))
with h5py.File(sys.argv[1]) as hdfRoot:
runs = GetRuns(hdfRoot, attributeValuePairs)
#do something here with runs...
print runs
因此,如果我位于包含该目录的命令行中,则mydata.hdf5
可以这样运行上述脚本:
python myscript.py mydata.hdf5 maxSteps 1e7 size 13
这将告诉脚本查找部分或完全匹配元数据的运行{'maxSteps':'1e7', 'size':'13'}
。然后,脚本可以按您喜欢的方式操作该数据(在“在这里做某事”部分),然后它将打印一个类似于以下内容的列表:
["Run01", "Run03"]
需要注意的是,HDF5仅在可以将数据表示为一组n维数组的情况下才会为数据提供完全自然的映射。模拟输出以某种数组的形式很常见,因此这可能不会成为问题。
Python的良好起点:http : //www.openbookproject.net/thinkcs/python/english2e/
HDF5:http : //www.h5py.org/docs/