对所有可以阐明我情况的人: 现在我正在与功能斗争,与细胞一样独特。从.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文件。关于如何查找最后一行唯一值的索引的任何想法?
答案 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