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

14 vues (au cours des 30 derniers jours)
Kohei Yoshino
Kohei Yoshino le 22 Avr 2024
Commenté : Kohei Yoshino le 23 Avr 2024
以下の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

Réponse acceptée

Kojiro Saito
Kojiro Saito le 23 Avr 2024
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 commentaire
Kohei Yoshino
Kohei Yoshino le 23 Avr 2024
ご回答ありがとうございます。ご提案いただいた構文ですと、1×32のデータしか得られず、やりたいこととしては、1×100(もしくは100×1)のデータにしたいです。自分がお示しした構文にて、A.Pelvic{1:n}(:,6)のグラフを以下のようにグラフ化(青線)し、その平均(赤線)を図示したいのですが、明らかに平均値ではない値が得られてしまいます。
また、グラフを見やすくするために、最終的には標準偏差を算出して以下のようなグラフ化を目指しています。このグラフはPythonのfill_betweenというメソッドを使用して作成しました。

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur ビッグ データの処理 dans Help Center et File Exchange

Produits


Version

R2023b

Community Treasure Hunt

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

Start Hunting!