2017-05-03 12 views
1

次の形式のデータをインポートするにはどうすればよいですか?Matlabデータのテキストファイルからのインポート

1.0,X 
.,-1.0 

表のサイズは異なる場合があります。次のファイルのようにも有効な入力ファイル

.,.,.,1.0 
.,X,.,-1.0 
.,.,.,. 

することができ、私はデータを読み取り、その後、別の行列に値を割り当てるためのstrcmpを使用するreadtable使ってこれをやって試してみましたが、それは仕事をdoesntの。私は間違って何をしていますか?

コード:

foo = readtable(environment_file) 
bar = zeros(size(foo,1),size(foo,2)); 

for i = 1:size(foo,1) 
    for j = 1:size(foo,2) 
     if strcmp(foo(i,j),'.') 
      bar(i,j) = 3; 
     elseif strcmp(foo(i,j),'X') 
      bar(i,j) = -10; 
     elseif strcmp(foo(i,j),'1.0') 
      bar(i,j) = 1; 
     elseif strcmp(foo(i,j),'-1.0') 
      bar(i,j) = -1; 
     end 
    end 
end 
bar 
+0

データファイルの形式はすぐにわかりません。 Xは何を表していますか?それは文字か数値変数ですか?データファイルの完全な説明/例を挙げてください。 – anyanwu

+0

はいそれは文字です – KV1

+0

私は '、'を無視することができますが、残りの値を行列に保存したい – KV1

答えて

0

あなたのコード内の2つの問題があります。 1つは、readtableがファイルをテーブルとして読み取り、ファイルの最初の行を列の名前として取得することです。したがって、ファイルの先頭に名前を付ける必要があります。

第2に、テーブルの内容にアクセスするには、{}とnot()を使用する必要があります。また、論理インデックスを使用して行列bar_bに値を割り当てることができるので、forループを使用する必要はありません。したがって、変更されたコードは次のようになります。

dataArray = readtable('environment_file.txt'); 
[n, m] = size(dataArray); 
bar_b = zeros(n, m); 
bar_b(strcmp(dataArray{:, :}, '.')) = 3; 
bar_b(strcmp(dataArray{:, :}, 'X')) = -10; 
bar_b(strcmp(dataArray{:, :}, '1.0')) = 1; 
bar_b(strcmp(dataArray{:, :}, '-1.0')) = -1; 
関連する問題