matlab データセットのサブセットを参照して割り当てることは、非常に非効率的であり、行 ^2 のようにスケーリングされる可能性があります。
例:
alldata は混合データの大規模なデータセットです。たとえば、150,000 行 x 25 列 (整数、ブール値、および文字列) です。
データセットの形式は次のとおりです。
'format', '%s%u%u%u%u%u%s%s%s%s%s%s%s%u%u%u%u%s%u%s%s%u%s%s%s%s%u%s%u%s%s%s%u%s'
次に、2 型の整数列を boolean 型に変換します
次のサブセット割り当て:
somedata = alldata(1:m,:)
m = 10,000 の場合は 7 秒以上かかり、m の値が大きい場合はとんでもない時間がかかります。time と m のプロットは、sortrows や find などの関数を使用する場合と同様に、すべてのデータのコピーがほぼ瞬時に行われることを考えると、奇妙な am^2 型の関係を示しています。実際、元の .csv データ ファイルの読み取りは、m の値が大きい場合の上記の割り当てよりも高速です。
プロファイラーを使用すると、文字列比較をチェックしてデータセット内の一意の値を決定する非常に遅い行を含む関数 subref があるようです。これは、データセット タイプの格納方法 (つまり、参照テーブル) に関連していますか? データセットには、多数の一意の文字列値が含まれています。
matlab でデータセットのサブセットを抽出するソリューションはありますか? 事前割り当て (どのように?)、または抽出/サブセットを割り当てるのではなく、データセットをコピーして行を削除するなど。
1.5Gb の RAM を搭載したデュアル コア マシンを使用していますが、タスク マネージャーは使用中の RAM が 1Gb 未満であると報告しています。