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

14 visualizaciones (últimos 30 días)
Kohei Yoshino
Kohei Yoshino el 22 de Abr. de 2024
Comentada: Kohei Yoshino el 23 de Abr. de 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

Respuesta aceptada

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

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre ビッグ データの処理 en Help Center y File Exchange.

Etiquetas

Productos


Versión

R2023b

Community Treasure Hunt

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

Start Hunting!