2

我已经将一些数据组织成一个嵌套结构,其中包括多个受试者,每个受试者 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 循环遍历试验,将它们存储在临时矩阵中,然后取临时列的平均值,但如果可以的话,我想避免为临时矩阵创建另一个变量。这可能吗?

4

2 回答 2

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了主题计数器变量。在 MATLAB 中使用和作为变量名时要小心,因为它们已经定义为 0 + 1.000i (complex number)ij

于 2013-08-08T19:15:23.697 回答
0

正如我在评论中提到的,添加另一个循环和临时变量原来是最简单的执行。

于 2013-09-23T23:59:42.143 回答