我已经将一些数据组织成一个嵌套结构,其中包括几个主题,每个主题4-5个试验,然后识别高度,步态周期的关节扭矩等数据等。例如:
subject(2).trial(4).torque
给出了对象2的第4次试验的关节扭矩矩阵,其中扭矩矩阵列表示自由度(髋部,膝部等),并且行表示从步幅的0到100%的时间增量。我想要做的是对每个自由度采取5次试验的平均值,并用它来代表主体(对于那个自由度)。当我尝试为第一自由度这样做时:
for i = 2:24
numTrialsThisSubject = size(subject(i).trial, 2);
subject(i).torque = mean(subject(i).trial(1:numTrialsThisSubject).torque(:,1), 2);
end
我收到此错误:
??? Scalar index required for this type of multi-level indexing.
我知道我可以使用嵌套的for循环遍历试验,将它们存储在临时矩阵中,然后取温度列的平均值,但是我想避免为临时矩阵创建另一个变量能够。这可能吗?
答案 0 :(得分:1)
您可以使用deal()
和cell2mat()
的组合。
试试这个(使用内置调试器来运行代码以查看它是如何工作的):
for subject_k = 2:24
% create temporary cell array for holding the matrices:
temp_torques = cell(length(subject(subject_k).trial), 1);
% deal the matrices from all the trials (copy to temp_torques):
[temp_torques{:}] = deal(subject(subject_k).trial.torque);
% convert to a matrix and concatenate all matrices over rows:
temp_torques = cell2mat(temp_torques);
% calculate mean of degree of freedom number 1 for all trials:
subject(subject_k).torque = mean(temp_torques(:,1));
end
请注意,我使用subject_k
作为主题计数器变量。 Be careful with using i
and j
in MATLAB as names of variables, as they are already defined as 0 + 1.000i (complex number)
答案 1 :(得分:0)
如上所述,添加另一个循环和临时变量是最简单的执行。