簡體   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