我目前有以下单元格:
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
答案 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)索引数组。