2011-06-29 106 views
-1

我讀了一堆的Excel文件,並使用MATLAB它們加載到一個SQL數據庫。我讀作爲一個單元陣列列,然後我想通過和擺脫行鍼對日期的「dateColumn」列有一個不好的價值。MATLAB加速功能

目前,我正在布爾值的向量,其中1表示該日期是好的:

arrayOfBools = cellfun(@(x) ~isnan(datenum(x)),dateColumn); 

然後由矢量截斷列的其餘部分。例如:

Ticker = Ticker(arrayOfBools); 

的問題是,我在每個電子表格35000行,而arrayOfBools = cellfun(@(X)〜isnan(datenum(X)),dateColumn);需要55秒,因爲我必須經歷的電子表格數量太長了。有沒有辦法我可以更有效地做到這一點?

+2

給我們一個「壞值」的日期列 – Amro

回答

1

您應該能夠直接傳遞字符串dateColumn你的電池陣列DATENUM,而不必使用CELLFUN,這將可能給你速度的提高:

arrayOfBools = ~isnan(datenum(dateColumn)); 

然而,DATENUM似乎已經發生了最近一些版本的更新很少,所以它的行爲(以及上述解決方案的有效性)將很大程度上取決於您使用的是哪個版本的MATLAB。在最新的版本(R2011a)似乎傳遞字符串的單元陣列作爲輸入將返回轉換後的數據串,而不是日期數的向量的字符數組(參見Examples section最後一個例子)。這與R2010b不同,傳遞一個單元格數組的字符串返回日期數字的向量。

然而,R2010b中嘗試一些不同的日期字符串時,我從來沒有得到一個NaN從一個無效的日期字符串造成。它只是拋出一個錯誤。我猜你正在運行的代碼(查找NaN輸出)是一箇舊版本的MATLAB。您應該在您的問題中指定該版本以及一些示例代碼,以便我們爲您提供幫助。

+0

即使文件說,否則,MATLAB的兩個版本(R2010b中和R2011a)返回日期數的向量,從來沒有的字符數組的一個例子,當給定單元格的字符串數組 – Amro