2013-03-02 34 views
0

我現在有以下細胞:如何識別哪個單元在Matlab中具有最小值?

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)...) 

但我不如何確定哪些細胞具有最小..我在尋找答案應該指出的最小值是在細胞的列2行1個G並且因此:20; 60

+0

你也應該指定你在數組中定義的最小值。矢量最小值?每個維度最小(即每個單元格條目中的每一行?)。 – gevang 2013-03-02 23:44:13

+0

@gevang我想要的最小值是第二列中每個單元格中兩個值的最小總和值。在20; 60中,單元格5是最小值。 – NLed 2013-03-02 23:45:38

回答

2

G[{:}]將安排(列方向)的單元陣列的2D矩陣(對應於各小區條目

的第一和第二元件線
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}可以使用ind2sub將線性索引minIndex轉換爲數組下標。

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

這樣你可以索引陣列既使用G{minIndex}(即,5)和G{i,j}(即,1,2)。

+0

索引顯示4 ...單元格4不包含最小值! – NLed 2013-03-02 23:42:15

+0

@NLed minVal是最小值(如您所定義的那樣)。您可以使用簡單公式將4(一個線性索引)轉換爲行和列,或者使用非空入口數組的維度,即[i,j] = ind2sub([3,2],4)將'ind2sub'轉換爲行和列。 – gevang 2013-03-02 23:47:15

+0

@NLed看到我更新的答案,它處理您對min和空單元格數組值的定義。 – gevang 2013-03-02 23:59:59

相關問題