0

我目前有以下单元格:

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

4

1 回答 1

2

G[{:}]将单元格数组(按列)排列为二维矩阵(对应于每个单元格条目的第一个和第二个元素的行

ans =

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

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

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

更新:由于元素的总和被定义为最小值(L1 范数),您可以使用cellfun检测空条目并在每个条目中求和,然后再应用min结果数组:

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

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

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

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

于 2013-03-02T23:39:41.550 回答