我有以下变量:
QOS= [100 200 120 300 45 88 90 500 66 180];
我MPR
是n 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
)。
我怎么能这样做?
答案 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