cell内に格納され​た時系列データの平均​値を算出するにはどう​すればいいですか?

조회 수: 65 (최근 30일)
Kohei Yoshino
Kohei Yoshino 2024년 4월 22일
댓글: Kohei Yoshino 2024년 4월 23일
以下のcellデータの時系列の平均を算出したいと考えています。
それぞれのcellに格納された変数のうち(:,6)の列を32個抽出して行平均を出したいと考え以下のコードを作成しましたが、meandataが32列目のデータしか格納されません。いい方法はありませんでしょうか?
data = cell(1, length(A.Pelvic)) % Aに格納されているPelvicという変数を参照
for i = 1:length(A.Pelvic)
data{i} = A.Pelvic{i}(:,6);
meandata = arrayfun(@mean, data{i}); % cellfunだと変数が'double'なので実行できないというエラーが出るためarrayfunを使用
end
for n = 1:length(A.Pelvic);
plot(A.Pelvic{n}(:,6), 'b')
hold on
plot(meandata, 'r'); % dataをあらかじめ作成し、そこにmeandataを格納するつもりでしたが、meandataが全体の平均ではなくA.Pelvicの最後の列のみが反映されており平均できていない
end

채택된 답변

Kojiro Saito
Kojiro Saito 2024년 4월 23일
meandataが32列目のデータしか格納されないのは、for ループの meandata = arrayfun(@mean, data{i});同じ変数名で上書きされているので、最後のループのi=32だけが格納されているためです。
forループを使わないでcellfunで一度で格納できます。
meandata = cellfun(@(x) mean(x(:,6)), A.Pelvic); % 1x32 double
また、プロットする際もそれぞれの6列目に対する平均値を示そうとされていると思いますので、meandata(n)でやってみたらいかがでしょうか。plot よりも定数値の線を引くyline も使えます。
for n = 1:length(A.Pelvic)
figure;
plot(A.Pelvic{n}(:,6), 'b')
hold on
%plot(meandata, 'r');
yline(meandata(n), 'r');
hold off
end
  댓글 수: 1
Kohei Yoshino
Kohei Yoshino 2024년 4월 23일
ご回答ありがとうございます。ご提案いただいた構文ですと、1×32のデータしか得られず、やりたいこととしては、1×100(もしくは100×1)のデータにしたいです。自分がお示しした構文にて、A.Pelvic{1:n}(:,6)のグラフを以下のようにグラフ化(青線)し、その平均(赤線)を図示したいのですが、明らかに平均値ではない値が得られてしまいます。
また、グラフを見やすくするために、最終的には標準偏差を算出して以下のようなグラフ化を目指しています。このグラフはPythonのfill_betweenというメソッドを使用して作成しました。

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 ビッグ データの処理에 대해 자세히 알아보기

태그

제품


릴리스

R2023b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!