2016-07-19 7 views
0

用せずに構造体のフィールドから意味:発見は、私はこのような構造の実験からのデータを持っているループ

data.subject.trial 

私が何であるかなど(すべての参加者間での試行で得点するための手段を見つける必要がありますトライアルxの全参加者の平均スコア?)。

私は以下のようにforループを使用することができますが、同じ事を達成するためのより簡単なライナーが必要なように感じます(この例では、 "trial"の値は数値です)。任意のヒント?どうもありがとう!

for i = 1:length(data.subject) 
    for j = 1:length(data.subject(i).trial) 
     a(i,j) = data.subject(i).trial(j); 
    end 
end 
trialMeans = mean(a); 
+0

[ドキュメント](http://www.mathworks.com/help/matlab/matlab_prog/access-data-in-a-structure-array.html): "注:インデックスの一部にMATLAB®は、 'S(1:2).X(1:50,1:80)'のようなステートメントをサポートしていません。構造の複数の要素。 – excaza

+1

あなたは基本的にすべての被験者のすべての試行の平均をやっているので、 'cell2mat(struct2cell(data.subject))'を使ってから、歩道の列を取り出して平均を走らせるべきですか? – GameOfThrows

+0

@GameOfThrowsこれはありがたいですが、データではうまくいきません。別のデータ型のサブフィールドがあるので、エラーが発生します。私が似ている最良の解決策は 'A = cell2mat({data.subject.trial})です。 %すべての試行のすべての得点を1つのベクトルにする B = reshape(A、[]、length(data.subject)) ';しかし、多くの被験者の行に変更してください。 – monkeytennis

答えて

1

私は、私は自分の質問への答えに出くわしたと思う...

A = cell2mat({data.subject.trial}); % Put all scores from all trials into 1 vector 
B = reshape(A,[],length(data.subject))'; % Reshape into rows of however many subjects there are 
trialMeans = mean(B); 

ありがとう!

関連する問題