0

次のようなデータがあります。

# 入力 1

0 1 1 0 0 0 0 1 1 0 0 1 0 1 1 0 1 0 0 1 0 0 0 1 0 1 0 0 0 1 0 1 1 0 1 0 0 1 1 0 0 1 0 0 1 0 1 0 0 1 0 1 0 1 1 0 0 1 1 0 0 1 0 0 0 0 1 1 0 1 0 1 0 1 0 0 0 1 1 0 0 0 0 1 1 0 1 0 0 1 1 0 0 1 1 0 1 0 0 0 0 0 1 0 0 1 0 1 0 1 0 1 0 1 0 0 1

# 出力 1

1.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00

# 入力 2

0 1 0 1 0 0 0 1 0 1 0 1 0 1 1 0 1 0 0 1 0 0 0 1 0 1 0 0 0 1 0 1 1 0 1 0 0 1 1 0 0 1 0 0 1 0 1 0 0 1 0 1 0 1 1 0 0 1 1 0 0 1 0 0 0 0 1 1 0 1 0 1 0 1 0 0 0 1 1 0 0 0 0 1 1 0 1 0 0 1 1 0 0 1 1 0 1 0 0 0 0 0 1 0 0 1 0 1 0 1 0 1 0 1 0 0 1

# 出力 2

1.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00

データはテキストファイルです。約 130 の入力および出力ベクトルがあります。基本的に、SVM モデルをトレーニングするために MATLAB にデータを読み込む必要があります。データを MATLAB にロードする方法を知っている人はいますか?

ありがとう!

4

3 に答える 3

1

テキストファイルをロードするより短い方法:

%// Read lines from text file into cell array
fid = fopen(filename, 'r');
C = textscan(fid, '%s', 'Delimiter', '', 'CommentStyle', '#');
fclose(fid);

%// Convert contents of each cell into a numerical array
C = cellfun(@str2num, reshape(C{1}, [], 2), 'UniformOutput', false);

結果は、データを含むN ×2 セル配列C( Nは入出力ペアの数) です。

質問の例では、C{1, 1}1 と 0 の入力 1×121 配列を格納しC{1, 2}、対応する 1×10 出力配列を含みます[1.00 0 0 0 0 0 0 0 0 0]

于 2013-04-15T10:05:09.670 に答える
0

テキスト ファイルは、対話的にもプログラム的にも MATLAB にインポートできます。

データをインタラクティブにインポートするには、インポート ツールを使用します。複数の同様のファイルに対して操作を繰り返すコードを生成できます。インポート ツールは、拡張子が .txt、.dat、.csv、.asc、.tab、.dlm のテキスト ファイルをサポートしています。これらのテキスト ファイルは四角形ではなく、行と列のヘッダーを持つことができます。これらのファイルのデータは、数値テキストと数値以外のテキストの組み合わせにすることができ、1 つ以上の文字で区切ることができます。

プログラムでテキスト ファイルからデータをインポートするには、インポート関数を使用します。テキスト ファイルのほとんどのインポート関数では、ファイル内のすべてのデータ フィールドが数値であり、データの各行の列数が同じである必要があります。

「load」、「textscan」など、MATLAB には多くのインポート ツールがあります。

于 2013-04-15T04:24:10.507 に答える
0

で始めたくない行がわかっている場合は、 「この文字に到達したら読み取りを停止する」#などの単純なオプションを使用できます。textscanその場合、一度に 1 行ずつ読み取ると、

fid = fopen(myFile);
while(~feof(fid))
    myData = textscan(fid, '%[^#]d');
    if numel(myData) > 1
        thisRow = [myData{:}];
    end
end

私は現在 matlab にアクセスできませんが、上記は非常に近いはずです...

データが実際に「ベクトルの名前」と「ベクトルのデータ」を交互に並べていて、名前の前に常に「#」が付いている場合は、もっとうまくできることに気付きました。

fid = fopen(myFile);
while(~feof(fid))
    myName = textscan(fid, '# %s %d');
    myData = textscan(fid, '%f', Inf);
    if numel(myData) > 1
        varName = sprintf('%s{%d}', myName{1}, myName{2});
        assignin('base', varName,myData); 
    end
end

これは、本当に必要なことをするだけかもしれません...または、やや近いかもしれません。これらのコマンドを試してみてください - 「インスピレーションのみ」として扱ってください。

于 2013-04-15T05:31:42.920 に答える