3

12 次元配列があり、各次元を最適化問題のインデックス値として使用しています。

A(:,:,i1,i2,i3,i4,i5,i6,i7,i8,i9,i10)

各インデックス値iは 1 ~ 5 の値です。

最大から最小に並べ替えAてインデックスを追跡したいので、どのインデックスが のどの値に対応するかがわかりますA

したがって、私の理想的な出力は、1 つの列が値で、もう 1 つの列がインデックス値である 2 列のセル/配列です。

簡単な 3D の例: 3D 配列があるとします A(:,:,i1)

どこ:

A(:,:,1) =  2 
A(:,:,2) =  6 
A(:,:,3) =  13 
A(:,:,4) =  11 
A(:,:,5) =  5  

出力を次のようにしたいと思います。

13   3
11   4
6    2
5    5
2    1

編集:

次のような1x1x3x3サイズの入力があると仮定します

A(1,1,1,1) = 3

A(1,1,2,1) = 1

A(1,1,3,1) = 23

A(1,1,1,2) = 12

A(1,1,2,2) = 9

A(1,1,3,2) = 8

A(1,1,1,3) = 33

A(1,1,2,3) = 14

A(1,1,3,3) = 6

予想される出力は次のようになります。

33 [1,1,1,3]

23 [1,1,3,1]

14 [1,1,2,3]

12 [1,1,1,2]

9 [1,1,2,2]

8 [1,1,3,2]

6 [1,1,3,3]

3 [1,1,1,1]

1 [1,1,2,1]

4

2 に答える 2

2

これは、多次元入力配列の汎用コードである必要があります -

%// Sort A and get the indices
[sorted_vals,sorted_idx] = sort(A(:),'descend'); 

%// Set storage for indices as a cell array and then store sorted indices into it
c = cell([1 numel(size(A))]); 
[c{:}] = ind2sub(size(A),sorted_idx);

%// Convert c to the requested format and concatenate with cell arary version of 
%// sorted values for the desired output
out = [num2cell(sorted_vals) mat2cell([c{:}],ones(1,numel(A)),numel(size(A)))]; 

汎用コードは、この優れたソリューションに感謝しています。

于 2014-10-30T20:37:29.470 に答える