2012-03-23 20 views
1

私はファイルfiledata.matを持っていますが、車両チャネルのデータを含むサブレベルの1x1構造体が含まれています。このファイルには30個の測定チャネルがあります。チャネル名、チャネル単位、およびチャネル値(時間に対する)は、別々のサブレベルに格納されます。MATLAB:構造体からデータを抽出し、カスタムサイズの行列に配置する

iはコード列番号によってどのチャネル(すなわち、どのデータの列)を指定した行の行1におけるチャンネル名とチャンネルユニット2

とマトリックスのデータが完全なコード場所を持ちたいです私は現在持っては以下の通りです:

clear all; 

channels = [1 4 8]; 

source = load('filedata.mat'); 

N = size(channels,2); 
I = size(source.Data.DataOut,1) + 2; 
data = zeros(I,N); 

for i = (1:1:I) 
    for n = (1:1:N) 
     if i == 1 
      data(i,n) = source.Data.ChannelNames{channels(n)}; 
     elseif i == 2 
      data(i,n) = source.Data.ChannelUnits{channels(n)}; 
     else 
      data(i,n) = source.Data.DataOut{i,channels(n)}; 
     end 
    end 
end 

私の考え方は、これは行1でchannelnamesを配置することである(つまり、i = 1の場合)、行2のchannelunits(i = 2のとき)、その後の残りのすべての行を配置しますi = Iまでのデータ

しかし、これを実行するとコード私はエラー "下付きの割り当てのディメンションの不一致を取得します。行14にある:

data(i,n) = source.Data.ChannelNames{channels(n)}; 

誰もが解決策を提案することができた場合 - おそらくもっと重要なこと - IVEは間違っている私はそれを本当に感謝(私は何かを学ぶことができます!)について説明します。

ありがとうございます。

答えて

0

ChannelNamesは文字列のセル配列であると仮定します。したがって、文source.Data.ChannelNames{channels(n)}は、dataの数値に割り当てることができない文字列を返します。

チャネル名を選択して変数に保存する場合は、この変数をセル配列にします。その後

data = cell(I,N); 
data(1,:) = source.Data.ChannelNames(channels); 
data(2,:) = source.Data.ChannelUnits(channels); 
data(3:I,:) = num2cell(source.Data.DataOut(:,channels)); 
+0

ユク channelnamesと単位がしかし、データイムは==で エラーを取得して、今取り組んでいるあなたの速いREPONSEため おかげで> 16個の データ(3時dataextract:I、:) =ソース.Data.DataOut(:、channels); %#私はDataOutがセル配列であると仮定します ???ダブルからセルへの変換は不可能です。 – user1230617

+0

コードからDataOutはセル配列でなければなりません。どうやらそれは間違った仮定です。 DataOutをセル配列に変換するか、別の数値変数に保持することができます。この 'data'変数をどうやって使うのですか? – yuk

+0

私はコードを修正しましたが、それは必要なものですか? – yuk

関連する問題