在matlab中使用唯一函数的单元格的最后一行索引

时间:2016-08-25 03:19:18

标签: matlab

对所有可以阐明我情况的人: 现在我正在与功能斗争,与细胞一样独特。从.csv导入数据后,我将其存储在一个Nx1单元格的结构中,如下所示。

manuf = {'Tim'; 'Tim'; 'John'; 'John'; 'John'; 'bill'; 'bill'; 'bill'; 'bill'}

manuf = 

    'Tim'
    'Tim'
    'John'
    'John'
    'John'
    'bill'
    'bill'
    'bill'
    'bill'

要查找每行重复的第一次索引,我可以使用以下命令:

[name,first_ndx] = unique(manuf)

name = 

    'John'
    'Tim'
    'bill'


first_ndx =

     3
     1
     6

但是,我对每个字符串重复的最后一行的索引很感兴趣。输出看起来像这样。

last_ndx =

     5
     2
     9

如果单元格是双精度数,则可以使用命令[~,last_ndx] = unique(manuf,'rows','last')轻松完成此操作,但事实并非如此,因为unique无法对单元格执行rows选项。应该注意,manuf中的行数是可变的,具体取决于.csv文件。关于如何查找最后一行唯一值的索引的任何想法?

2 个答案:

答案 0 :(得分:1)

如果你不介意一点点黑客攻击,每个名字组的最后一个索引= length(manuf)+ 1 - 与manuf相反的每个名字组的第一个索引。所以你可以这样做:

>> [~,last_ind_rev]=unique(manuf(end:-1:1))

last_ind_rev =

     5
     8
     1

>> last_ind = length(manuf) + 1 -last_ind_rev

last_ind =

     5
     2
     9

答案 1 :(得分:1)

旧版MATLAB中unique的行为用于报告要存储在unique的第二个输出中的每个唯一条目的最后次出现,你在追求什么。只有在MATLAB的最新版本中,他们才开始报告第一次出现,如结果中所示。

您可以使用legacy选项unique来指定此内容:

>> [~, last_idx] = unique(manuf, 'legacy')

last_idx =

     5
     2
     9