2011-01-21 27 views
2

我在MATLAB中處理point cloud數據時遇到'數據過載'問題。這是我目前正在做的:如何在分析過程中存儲我的大型MATLAB數據文件?

  1. 我開始我的原始數據文件,每個約30Mb的順序。
  2. 然後,我對它們進行初始化處理,以提取n個單獨的對象,並刪除離散點,這些點全部組合爲1×n結構,testset,保存到testset.mat(〜100Mb)。

    到目前爲止好。現在事情變得複雜:

  3. 對於testset中的每個對象的每個點,我將計算數的功能,其中最終被某些大小的矩陣(每個點)中的一個。矩陣的大小和計算的其他一些屬性是計算的參數。我將這些計算的特徵保存在1×n單元格數組中,每個單元格包含每個點的矩陣數組。

    然後,我將這個單元格數組保存在.mat文件中,其中名稱指定了參數,使用的測試數據的名稱和提取的特徵的類型。例如:

    testset_feature_type_A_5x5_0.2x0.2_alpha_3_beta_4.mat

  4. 現在對於每個這些文件,我然後做一些進一步的處理(使用分類算法)。同樣有更多參數要設置。

所以,現在我在一個棘手的情況,其中初始數據的每一個最後一塊已經通過一些路徑來了,但路徑採取(與沿該路徑設置的參數),本質上並沒有與數據舉行本身。

所以我的問題是:

有沒有更好的方式來做到這一點?任何在MATLAB中處理大型數據集的經驗的人都能提出一種更高效,更整合地存儲數據和參數設置的方法嗎?

理想情況下,我將能夠查找某一段數據,而不必在文件字符串上使用正則表達式,但也有一種激勵措施,即在單獨處理文件時將它們分開以節省系統內存(以及幫助防止腐敗)。

每次計算所花費的時間(約2小時)禁止「即時」計算數據。

回答

5

對於一個類似的問題,我已經創建了一個類結構,其執行以下操作:

  • 每個對象被鏈接到原始數據文件
  • 對於每個處理步驟中,有一個屬性
  • 屬性的設置方法將數據保存到文件中(在與原始數據文件名稱相同的目錄中),存儲文件名並更新「狀態」屬性以指示此步驟已完成。
  • 如果文件名已被存儲並且狀態指示「已完成」,則屬性的get方法將裝入數據。
  • 最後,可以保存/加載對象,以便我現在可以進行一些處理,保存對象,稍後加載它,並立即知道處理管道中特定數據集有多遠。

因此,內存中唯一的數據是當前正在處理的數據,並且您可以輕鬆地知道哪個數據集處於哪個處理階段。而且,如果你設置你的方法來接受對象數組,你可以做非常方便的批處理。

+3

+1我與@Jonas合作,很難在每個matfile中存儲一個數據集以提高速度和簡單性。你需要的是將加載和保存抽象爲一組訪問函數。我個人不喜歡Matlab中的類,只是使用一些函數。 – 2011-01-21 18:53:36

1

我不完全確定這是否是您需要的,但save command允許您在一個.mat文件中存儲多個變量。例如,如果您的參數設置存儲在數組中,那麼您可以將其與數據集一起保存在一個.mat文件中。在加載文件時,數據集和帶參數的數組都將被恢復。

或者您是否希望能夠在不加載文件的情況下加載參數?然後,我會親自選擇帶有參數(但類似的文件名)的第二組文件的廉價解決方案。

+1

謝謝。我已經嘗試了一下,但仍然存在數據和參數未連接的問題 - 一旦它們都加載到工作區中,數據就會再次被「取消標記」。將參數存儲在一個單獨的數組中,每行都引用一個文件的想法可能會奏效。 – 2011-01-21 16:00:36

相關問題