16 GB の RAM を搭載した Linux Mint v12 で Matlab R2011b と R バージョン 2.13.1 を実行しています。
私はcsvファイルを持っています。最初の 5 行 (およびヘッダー) は次のとおりです。
#RIC,Date[G],Time[G],GMT Offset,Type,Price,Volume
DAEG.OQ,07-JUL-2011,15:10:03.424,-4,Trade,1.68,1008
DAEG.OQ,07-JUL-2011,15:10:03.424,-4,Trade,1.68,1008
DAEG.OQ,07-JUL-2011,15:10:03.424,-4,Trade,1.66,300
DAEG.OQ,07-JUL-2011,15:10:03.424,-4,Trade,1.65,1000
DAEG.OQ,07-JUL-2011,15:10:03.464,-4,Trade,1.65,3180
ファイルが大きい(約900MB)。文字データと数値データの組み合わせが与えられた場合、次のようにこのファイルを matlab に読み込むことができます。
fid1 = fopen('/home/MyUserName/Temp/X.csv');
D = textscan(fid1, '%s%s%s%f%s%f%f', 'Delimiter', ',', 'HeaderLines', 1);
fclose(fid1);
ファイルは 900MB ですが、上記のコードを実行すると、システム モニターは RAM の使用量が約 2GB から 10GB に跳ね上がることを示します。さらに悪いことに、少し大きな csv ファイル (約 1.2 GB) でこの同じ手順を試みると、RAM が 16 GB で最大になり、Matlab はデータの読み取りを完了できません (「ビジー」モードのままになります)。
同じファイルを R に読み込みたい場合は、次を使用できます。
D <- read.csv("/home/MyUserName/Temp/X.csv", stringsAsFactors=FALSE)
これには Matlab よりも少し時間がかかりますが、システム モニターは、RAM の使用量が 2GB から 3.3GB にしか跳ね上がっていないことを示しています (元のファイル サイズを考えると、はるかに妥当です)。
私の質問には2つの部分があります:
1)textscan
このシナリオでメモリを大量に消費するのはなぜですか?
2) RAM を使い果たすことなく、このタイプの 1.2GB の csv ファイルをシステムの Matlab に取得するために使用できる別の方法はありますか?
編集:明確にするために、matlab のみのソリューションが存在するかどうかについて興味があります。つまり、別の言語を使用して csv ファイルを小さなチャンクに分割するソリューションには興味がありません (これは私はすでにやっています)。Trav1 様、申し訳ありませんが、最初からこれを明確にすべきでした。