如何优化/简化这种独特/排序顺序?

时间:2014-05-24 15:05:04

标签: matlab

我有一个table,其中一些(事实上,大多数)记录多次出现。我想重新排序记录,以便给定记录的所有多次出现是连续的,并且我想以保留“首次出现的顺序”的方式执行此操作。我还想要重新排序的表中每个唯一记录的第一次出现的索引,以便我可以快速访问每个重复记录块。

注意:在下面的例子中,tbl指的是MATLAB的一个新的(从R2013b?)table个对象,但这个例子也可行如果tbl被简单地定义为字符向量。只需从table(的定义中删除)tbl

这是一个例子。假设原始表是这样的:

>> tbl = table('CAABCB'.')  % example works also with tbl = 'CAABCB'.';
tbl = 
    Var1
    ____
    C   
    A   
    A   
    B   
    C   
    B   

所需的重新排序表是

    Var1
    ____
    C   
    C   
    A   
    A   
    B   
    B   

...并且第一个位置的向量是[1 3 5].'

(请注意,上面所需的重新排序表与sortrows(tbl)生成的不同。区别在于所需表的排序保留了第一次出现的顺序,因此{{ 1}}来自CA等,因为在原始表B中,tbl的第一次出现发生在C的第一次出现之前}和A。)

我是这样做的:

B

这会为 [~, ~, group_id_col] = unique(tbl, 'stable'); [sorted_group_id_col, sort_perm] = sort(group_id_col); reordered_tbl = tbl(sort_perm, :); [~, group_locs, ~] = unique(sorted_group_id_col, 'stable'); reordered_tbl生成所需的值,但它会通过四个 T O N < / em>)操作,其中 N group_locs中的行数。

使用MATLAB内置函数可以用更少的此类操作完成吗?

0 个答案:

没有答案