如何在MATLAB中找到嵌套结构中的列的平均值

时间:2013-08-08 12:46:26

标签: matlab data-structures

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

2 个答案:

答案 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)

如上所述,添加另一个循环和临时变量是最简单的执行。