2011-06-29 18 views
-1

私はMATLABを使って複数のExcelファイルを読み込み、SQLデータベースに読み込んでいます。私はセル配列として列を読み込んでいますが、その後、日付の 'dateColumn'列の値が悪い行を取り除きたいと思います。matlabは関数を高速化します

現在、私は1日が良いことを意味するブールのベクトル作っています:

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

をしてから、そのベクトルで列の残りの部分を切り捨てます。たとえば:

Ticker = Ticker(arrayOfBools); 

問題は、私は35,000各スプレッドシートの行、およびarrayOfBools =関数cellfun(@(x)は〜ISNAN(関数datenum(x))が、dateColumn)を持っているということです。私が通過しなければならないスプレッドシートの数を考えると、長すぎる55秒かかる。これをより効率的に行う方法はありますか?

+2

日付列の「悪い値」の例 – Amro

答えて

1

あなたはおそらくあなたの速度の向上を与えるであろう、CELLFUNを使用せずにDATENUMに直接文字列dateColumnのあなたのセル配列を渡すことができるはずです。しかし、DATENUMを受けているように見えます

arrayOfBools = ~isnan(datenum(dateColumn)); 

いくつかの最近のリビジョンの更新が少なく、その動作(および上記のソリューションの妥当性)は、使用しているMATLABのバージョンに大きく依存します。最新バージョン(R2011a)では、文字列のセル配列を入力として渡すと、Examples sectionの最後の例を参照して、文字配列が変換されたデータ文字列で返されます。これは、文字列のセル配列を渡すと日付番号のベクトルを返すR2010bとは異なります。

しかし、R2010bでいくつかの異なる日付文字列を試してみると、無効な日付文字列の結果としてNaNが発生することはありませんでした。それは単にエラーを投げるだけです。あなたが実行しているコードを推測しています(これはNaNの出力を探します)は、古いMATLABバージョンです。あなたの質問には、サンプルコードとともにバージョンを指定して、私たちがあなたを助けてくれるようにしてください。

+0

ドキュメントに別途記載されていますが、両方のバージョンのMATLAB(R2010bおよびR2011a)は日付番号のベクトルを返します。文字列のセル配列 – Amro

関連する問題