2014-01-11 113 views
0

我正在開發一個Fortran應用程序,我在這裏定義了一個對象表面上的四邊形面板。我正在計算這些四邊形面板上多個頻率的各種參數。FORTRAN:存儲大量數據的最佳方法,可在MATLAB中讀取

輸出文件應該是這樣:

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

+1

調查http://www.mathworks.co.uk/help/matlab/matlab_external/creating-a-mat-file-in-fortran。html –

+1

你可以使用NetCDF庫,可以與Fortran和Matlab一起使用 – steabert

回答

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等文件格式。

2

我第二@ steabert提到了NetCDF,並且還有HDF5(其上構建了NetCDF 4格式)。但是,它取決於「數據類型」的含義:它們最適合於常規/剛性數據佈局,NetCDF對Fortran派生類型的支持有時可能會很痛苦。

具有大塊的情況的可能優點是數據透明壓縮;數據校驗和;並且與Fortran stream訪問相比,可能更自然的隨機訪問(也就是說,不需要基於數組索引計算查找位置)。這是通常的自我記錄和便攜式文件格式的一部分。

MATLAB有inbuilt支持讀取這些文件,最近的版本也支持OPeNDAP framework,所以你甚至不需要在同一臺(或多臺)機器上安裝這個文件。

當然,缺點:額外的軟件;額外的技能發展(特別是HDF5);並增加了Fortran方面的代碼複雜性。

相關問題