gpt4 book ai didi

matlab - 根据第二个矩阵中给定的顺序对矩阵进行排序 (MATLAB)

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

我有一个已排序的大矩阵。但是,我需要根据另一个矩阵中的 ID 顺序对其重新排序(col. 1 here for both matrices)。我如何使用矢量化来做到这一点?例如:

bigmat = [ ...
1 10 ;
1 30 ;
1 40 ;
2 1 ;
2 11 ;
3 58 ;
4 2 ;
4 5 ] ;

ordermat = [ 2 ; 1 ; 4 ; 3 ; 6] ; % Integer IDs

finalans = [ ...
2 1 ;
2 11 ;
1 10 ;
1 30 ;
1 40 ;
4 2 ;
4 5 ;
3 58 ; ] ;

ordermat 中的所有一些 ID(此处为整数)可能不存在于 bigmat 中。它们可以被忽略,如上所示,使用 id = 6。谢谢!

最佳答案

这是我的解决方案:

ordermat = [2; 1; 4; 3; 6];
bigmat = [
1 10
1 30
1 40
2 1
2 11
3 58
4 2
4 5
];
%#bigmat = sortrows(bigmat,1);

%# keep valid IDs,
ord = ordermat( ismember(ordermat,bigmat(:,1)) );
ord = grp2idx(ord);

%# starting/ending locations of the different IDs in bigmat
startInd = find( diff([0;bigmat(:,1)]) );
endInd = [startInd(2:end)-1; size(bigmat,1)];

%# generate startInd(i):endInd(i) intervals
ind = arrayfun(@colon, startInd, endInd, 'UniformOutput',false);

%# order then combine the intervals of indices
ind = [ind{ord}];

%# get final sorted result
finalans = bigmat(ind,:);

我确保它能处理不同的情况,例如:

  • ordermat 包含在 bigmat 中找不到的 ID:ordermat = [2;1;4;3;6]
  • 并非所有 bigmat 的 ID 都在 ordermat 中表示:ordermat = [2;1]
  • ID 不连续和/或不从 1 开始:ordermat=ordermat+10; bigmat=bigmat+10;

关于matlab - 根据第二个矩阵中给定的顺序对矩阵进行排序 (MATLAB),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7033194/

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