フィルターのクリア

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

7 ビュー (過去 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 Center および File ExchangeText Data Preparation についてさらに検索

タグ

製品


リリース

R2023b

Community Treasure Hunt

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

Start Hunting!