MATLAB中sort函数可以对数据进行排序,本代码在此基础上,将sort返回的数据的线索引转换为原始矩阵的行列索引,以矩阵matrix = [8 4; 7 1; 3 6]为例,运行代码可得到如下结果:
具体代码如下:
% matrix是需要排序的矩阵
matrix = [8 4; 7 1; 3 6];
% 获取矩阵的大小
[rows, cols] = size(matrix);
rows_cols = rows*cols;
index_matrix = zeros(2,rows_cols);
% 初始化一个与矩阵元素数量相同的索引数组
indices = 1:rows*cols;
% 将矩阵转换为列向量
matrix_vector = matrix(:);
% 降序排序矩阵的列向量
[sorted_matrix_vector, sorted_indices] = sort(matrix_vector, 'descend');
% 根据排序后的索引获取原始索引
original_indices = indices(sorted_indices); % 矩阵是按列进行计数的。
% 将排序后的列向量转换回矩阵形式
sorted_matrix = reshape(sorted_matrix_vector, [rows, cols]);
IX_fac = sorted_matrix(:);
% 将原始线索引转换为行和列索引
for i_rows_cols = 1:rows_cols
original = original_indices(i_rows_cols);
% 获取行索引
if mod(original,rows) == 0
original_row_final = rows;
else
original_row_final = mod(original,rows);
end
% 获取列索引
original_col_final = floor((original-1)/rows)+1;
% 存储行列索引
index_matrix(:,i_rows_cols) = [original_row_final;original_col_final];
end
% % 显示结果
disp('原始矩阵');
disp(matrix);
disp('从大到小的线索引:');
disp(original_indices);
disp('从大到小的行列索引:');
disp(index_matrix);