如何识别哪个单元格在Matlab中具有最小值?

时间:2013-03-02 23:17:30

标签: arrays matlab cell

我目前有以下单元格:

G =细胞(4,2)

每次售卖都有2x1 double

示例:

[100;200]   [20;60]
[100;300]   [20;90]
[200;300]   [60;90]
[]  []      []  []

如何识别哪个单元格具有最小值,(比较的值在SECOND列中),以便加法在20; 60 20; 90和60之间; 90?

我开始输入代码但却被卡住了:

for k=1:(4)
    add(k)=sum(cell2mat(G(k+4)))
end

(...Find a way to know which cell gave the minimum off `add` using min(add)...)

但是我不知道如何识别哪个单元格具有最小值。我正在寻找的答案应该表明最小值是单元格G的第2列第1行因此:20; 60

1 个答案:

答案 0 :(得分:2)

G[{:}]将(按列方式)将单元格数组排列成2D矩阵(与每个单元格条目的第一个和第二个元素对应的行

ans =

   100   100   200    20    20    60
   200   300   300    60    90    90

然后,您可以相应地应用min以获取单元格的最小值和线性索引,例如:

[minVal, minIndex] = min([G{:}], [], 2);

更新:由于元素总和被定义为最小值(L1范数),因此在应用min之前,您可以使用cellfun检测空条目并对每个条目求和在结果数组上:

indexEmpty = cellfun(@isempty, G)  % find empty entries of G
sumG = cellfun(@sum, G)            % apply sum on each entry of G 
sumG(indexEmpty) = nan;            % set empty entries to NaN (exclude from min) 
[minVal, minIndex] = min(sumG(:)); % return min and its location in sumG (and G)

结果:G{minIndex}

ans =

   20
   60

可以使用ind2sub将线性索引minIndex转换为数组下标。

[i,j] = ind2sub(size(G), minIndex);

通过这种方式,您可以使用G{minIndex}(即5)和G{i,j}(即1,2)索引数组。