FORTRAN:存储大量数据的最佳方法,这些数据在MATLAB中是可读的

时间:2014-01-11 04:05:12

标签: matlab fortran large-files fortran90

我正在Fortran中开发一个应用程序,我在这里有一些在对象表面定义四边形面板的点。我正在计算这些四边形面板上的各种频率的各种参数。

输出文件应如下所示:

FREQUENCY,PANEL_NUMBER,X1,Y1,Z1,X2,Y2,Z2,X3,Y3,Z3,X4,Y4,Z4,AREA,PRESSURE,....
0.01,1,....
0.01,2,....
0.01,3,....
.
.
.
.
0.01,2000,....
0.02,1,....
0.02,2,....
.
.
.
0.02,2000,...
.
.

我期待最多300,000行,30列。数据类型由整数,实数和复数组成。我想存储这个文件,然后在MATLAB中读取文件以创建一个3D几何体,我将根据每个面板的压力进行着色。

问题是,从文件结构中可以看出,有很多数据。我目前正在将其写为CSV文件,大小约为26GB。

我不想使用数据库来处理这个问题。任何人都可以建议我使用FORTRAN写这个数据的文件格式。

感谢您的帮助, 阿米塔瓦

2 个答案:

答案 0 :(得分:3)

以数据的本机格式存储数据,而不是将数字转换为基数10和字符的人类可读文件。这将生成最小的文件,并且处理速度最快。在Fortran open语句中,使用form='unformatted', access='stream'。第一个导致文件未格式化,第二个导致Fortran不包含其通常的记录长度信息,这是特定于Fortran的。这种遗漏使文件更容易移植到其他语言。其他人可以更好地帮助如何在MATLAB中读取文件;我在网上找到了这个:http://www.mathworks.com/help/matlab/import_export/importing-binary-data-with-low-level-i-o.html

更新:这种方法有几个假设。如果您希望在不同类型的计算机之间传输文件,则可能无法轻松工作。您的问题暗示需要许多相同内容的行。相同的行只是将文件结构与该数量的相同记录匹配。您似乎想要读取整个文件,在这种情况下,顺序文件是合适的。如果您希望阅读“随机”记录,Fortran直接访问文件可能会有用。由于相同记录的简单性,使用本机文件格式似乎很容易。如果您想要跨计算机的自我文档或可移植性(不同的数字表示),文件格式(如HDF或FITS)将非常有用。

答案 1 :(得分:2)

我第二次@ steabert提到NetCDF,还有HDF5(构建NetCDF 4格式)。但是,它确实取决于“数据类型”的含义:它们最适用于常规/刚性数据布局,NetCDF对Fortran派生类型的支持有时会很痛苦。

大块肿块的可能优点是数据透明压缩;数据校验和;与Fortran stream访问相比,可能更自然的随机访问(即,不需要根据数组索引计算搜索位置)。这是自我文档和便携式文件格式的常见内容。

MATLAB有inbuilt支持读取这些文件,最新版本也支持OPeNDAP framework,所以你甚至不需要在同一台(或多台)机器上安装该文件。

当然,缺点:额外的软件;额外的技能发展(特别是HDF5);并且增加了Fortran端的代码复杂性。