2012-03-03 74 views
0

我在Matlab中有一個已經保存在硬盤上的結構體(矩陣)。我目前使用load在我的函數中加載這些文件。你有任何建議,以更快的速度做這個事情嗎?在MATLAB中訪問一個.mat文件(不使用加載函數)

(是的,我可以將結構作爲變量傳遞給我的函數,但由於內存問題,這是不可能的!)。謝謝!這將是一個很大的幫助!

A = struct('local', randn(200000,14), 'usd', randn(200000,14), ... 
      'ttm', randn(180000,14), 'avg', randn(190000,14), ... 
      'ttm1yr', randn(190000,14), 'avg1yr', randn(190000,14)) ; 
save('A.mat', 'A') ;      clear all;clc 

tic, load A.mat, A=A.local; toc %--> Takes 1.05 seconds 

回答

1

看來您只對保存文件的特定塊感興趣。我會建議改變保存的數據的格式,以便各個變量可以使用load

S = load(filename, variables) 

形式加載。這將顯着加快加載速度,因爲您可以避免將所有不需要的數據從磁盤複製到內存中,只需立即將其釋放即可。

如果您的數據已經在結構形式,你可以使用這種形式的save(從在線文檔):

保存(文件名,「-struct」,structName,字段名)存儲領域 指定的標量結構作爲文件中的單個變量。如果 包含可選字段名稱,則保存功能僅存儲該結構的指定字段 。您不能在同一個調用中指定變量和'-struct'關鍵字來保存。

+0

我知道你在帖子的標題中要求不使用'load' - 但它看起來像你真正關心的是加速過程,而不是專門避免'load' :) – tmpearce 2012-03-03 23:47:43

+0

- >謝謝!它現在非常快。你是對的。 「加載」不是問題。我只是想減少時間... – Maddy 2012-03-05 16:21:21

1

從R2011a開始,您可以通過matfile對象訪問Mat文件的內容,而無需使用加載。 help matfile瞭解詳情。

真正的優勢在於,它允許讀取/寫入大型數組的一部分而無需加載或保存整個數組。

由於結構的字段不能以這種方式編制索引,因此這對您的當前結構的用途有限。但是一個相對較小的重要因素將允許您利用這些功能,具體取決於應用程序的其他部分。

相關問題