【问题标题】:Sort matlab matrix rows based on function基于函数对matlab矩阵行进行排序
【发布时间】:2017-12-13 20:58:16
【问题描述】:

假设我有一个 Nx3 矩阵 M

例如,考虑一个函数 Map(v),它接收 1x3 数组 作为输入并返回一个 double

如何对 M 的行进行排序,以使 Map 最小的行排在最前面?

也就是说,如果Map(M(i,:)) ≤ Map(M(j,:)) 对于所有1 ≤ j ≤ Nj ≠ ii 行应该是第一行?

示例:

M = |1 2 3|
    |4 5 6|
    |7 8 9|

Map(v){
    if (v(1) == 1 && v(2) == 2 && v(3) == 3) return 2
    if (v(1) == 4 && v(2) == 5 && v(3) == 6) return 3
    if (v(1) == 7 && v(2) == 8 && v(3) == 9) return 1
}

所以排序应该像这样离开M:

M = |7 8 9|
    |1 2 3|
    |4 5 6|

【问题讨论】:

  • 使用[~,I]=sort(your_sum) 获取I 中的索引。 M(I,:) 是您想要的输出。检查sort
  • @brainkz [~,I]=sort(your_sum) 是什么意思?
  • 请阅读documentation
  • @Daniel by your_sum 我的意思是Sum(a,b,c),一个用于排序的向量。
  • @brainkz 没用,我是 matlab 新手,我不知道您对 [~,I] 的含义以及 [~,I] = sort(Sum) 将如何排序

标签: matlab sorting matrix


【解决方案1】:
% initialize an N-by-3 matrix where N=10...
M = [
  1 0 3;
  4 2 2;
  0 1 0;
  7 5 6;
  3 3 8;
  2 1 4;
  0 0 6;
  3 1 2;
  5 0 0;
  1 6 2
];

% sum its rows...
M_sum = sum(M,2);

% sort the vector of sums in ascending order...
[~,idx] = sort(M_sum);

% reorder the matrix rows based on the sorting result...
M = M(idx,:);

【讨论】:

  • 如果函数不是 sum,但例如,任何映射 Map(a,b,c) ,这会起作用吗?
  • 映射是什么意思?这取决于它是否为每一行生成一个带有值的向量,是的,否则我怀疑。
  • 正如我所说,只要你的 map 函数返回一个列向量,代码就不会改变: M_mapped = map(M); [~,idx] = sort(M_mapped); [~,idx] = sort(M_sum);
  • 没有,但它帮助我理解了一点,我最终使用了 sortrow 方法并且能够用更多的代码解决它
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-10-27
  • 1970-01-01
  • 2021-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多