0

申し訳ありませんが、私はmatlabが初めてです。

私が持っているもの:Day01、Day02、Day03などのラベルが付いた約80のサブフォルダーを含むフォルダー。各サブフォルダーには「sample_ids.txt」というファイルがあり、タブ区切り形式のanxmマトリックスです。

必要なもの: 行列の配列である 1 つのデータ構造。各行列は「sample_ids.txt」のデータであり、Day01、Day02、Day03 などのアルファベット順である必要があります。

ポイントAからポイントBに移動する方法がわかりません。ガイダンスをいただければ幸いです。

4

1 に答える 1

0

この問題は、ファイルの検索とメモリへの読み込みという 2 つの部分に分解できます。

ファイルの検索は非常に簡単で、StackOverflow で既に説明されています。

それらをメモリにロードするには、多次元配列が必要です。これは、通常の配列を作成し、より多くのインデックス次元を使用し始めるのと同じくらい簡単A = ones(2); A(:,:,2) = ones(2);です。たとえば、サイズが 2 x 2 x の 3 次元配列が得られます。 2、いたるところにあります。

あなたが望むのは、おそらく次のようなものが欲しいです:

A = [] % No prealocation. Fix for speed-up.
files = dir('./Day*/sample_ids.txt');
for file = files
    temp = load(file.name);
    A(:,:,size(A,3)+1) = temp;
end

disp(A) % display the contents of A afterards...

このコードを広範囲にテストしたわけではありませんが、問題なく動作するはずです。

いくつかの重要なポイント:

  1. すべてのファイルには、まったく同じ次元の行列が含まれている必要があります。MATLAB は、異なるレイヤーで異なる次元を持つ配列を処理できません (少なくとも通常の配列では処理できません。セル配列を使用できますが、すぐに複雑になります...)。異なる長さのベクトルから行列を構築しようとしていると考えてください。

  2. 大量のデータがあり、その量がわかっている場合は、A を事前に割り当てることで多くの時間を節約できます。これは、それぞれに行と列があるデータファイルの場合と同じくらい簡単A = zeros(k,l,m)です。これを行う場合、現在のファイルのインデックスも把握する必要があるため、それを割り当ての 3 番目のインデックス (ループ ブロックの 2 行目) として使用できます。これはインターネット調査の練習問題として残しておきます:)mkl

于 2013-04-02T00:56:06.553 に答える