gpt4 book ai didi

arrays - 排序并保留 n 维数组的索引 -- MATLAB

转载 作者:太空宇宙 更新时间:2023-11-03 20:29:25 30 4
gpt4 key购买 nike

我有一个 12 维数组,我将每个维度用作优化问题中的索引值。

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

每个索引值i是一个从1到5的值。

我想对 A 从大到小进行排序并跟踪索引,以便我知道哪些索引对应于 A 的值。

所以我的理想输出是一个 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]

最佳答案

这应该是任何多维输入数组的通用代码-

%// 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)))];

通用代码感谢this fine solution .

关于arrays - 排序并保留 n 维数组的索引 -- MATLAB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26661747/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com