在MATLAB中执行单元格的操作

时间:2014-09-06 14:42:58

标签: arrays matlab cell-array

我有以下变量:

QOS= [100 200 120 300 45 88 90 500 66 180];

MPRn x n个单元格。它包含一些2 x 2双精度单元格和1 x 2双精度单元格。我希望2×2的单元格(例如[2 3 ; 4 5 ])计算每行的QOS(例如:QOS(2)+ QOS(3) = 200+120= 320),然后返回具有最高QOS值的行(例如:此示例中为4 5

我想要1乘2的单元格(例如[5 6])计算每个元素的QOS(例如:QOS(5) = 45),然后返回最高的元素QOS值(例如:此示例中为6)。

我怎么能这样做?

1 个答案:

答案 0 :(得分:1)

由于您的单元格数组的结构,最简单的方法是使用for循环。我确信还有其他方法,但为了让某些工作正常,让我们使用for循环。

对于单元格数组中的每个单元格,您将使用矩阵访问QOS变量,然后对列进行求和。由于您的单元格数组具有1 x 2矩阵,因此对列进行求和将无法得出正确的结果。因此,为了使我们的逻辑工作,您需要确保这是一个列向量。我将把这个逻辑放在for循环中以防万一。

完成后,您将返回与最大总和相对应的每个单元格的行索引。换句话说,给定矩阵MPR,变量out将存储输出,请尝试这样做:

QOS = [100 200 120 300 45 88 90 500 66 180]; %// From your post
out = cell(1,numel(MPR)); %// Create output cell array
for idx = 1 : numel(MPR) %// For each cell in MPR...
    matr = QOS(MPR{idx}); %// Access QOS variables defined by MPR cell
    if size(matr,1) == 1 %// Make sure it's a column vector if row vector (1 x 2)
        matr = matr(:);
    end
    [~,loc] = max(sum(matr,2)); %// Sum across all the columns
    out{idx} = matr(loc,:); %// Output row of MPR cell that has max sum
end

例如,假设MPR是您上面的例子:

MPR{1} = [2 3; 4 5];
MPR{2} = [5 6];

运行上面的代码,我们得到:

>> celldisp(out)

out{1} =

     4     5



out{2} =

     6