0

私は現在、次のセルを持っています:

G=セル(4,2)

各販売には2x1 double

例 :

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

加算が 20;60 20;90 と 60;90 の間にあるように、最小値を持つセル (比較される値が 2 番目の列にある) を特定するにはどうすればよいですか?

コードの入力を開始しましたが、行き詰まりました:

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[{:}]セル配列を (列方向に) 2D 行列に配置します (各セル エントリの最初と 2 番目の要素に対応する行

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

線形インデックスは、 ind2subminIndexを使用して配列添字に変換できます。

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

このようにして、G{minIndex}(つまり 5) とG{i,j}(つまり 1,2) の両方を使用して配列にインデックスを付けることができます。

于 2013-03-02T23:39:41.550 に答える