繁体   English   中英

FORTRAN:存储可在MATLAB中读取的大量数据的最佳方法

[英]FORTRAN: Best way to store large amount of data which is readable in MATLAB

我正在开发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将该文件格式写为哪种数据。

感谢您的帮助,Amitava

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

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

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

对于大块的情况,可能的优势是数据透明压缩; 数据校验和; 与Fortran stream访问相比,可能更自然(即无需根据数组索引计算搜索位置)。 这是自记录和可移植文件格式的常规功能之上。

MATLAB具有读取这些文件的内置支持,并且最新版本还支持OPeNDAP框架,因此您甚至不需要将文件放在同一(或多台)计算机上。

当然,缺点是:额外的软件; 额外的技能发展(尤其是HDF5); 并增加了Fortran方面的代码复杂性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM