I want a simple enumeration of the following series a=
['465465465','465465465','465465465','31546895489','31546895489','897897979','897897979', '897897979','897897979','897897979','897897979')'
in order to get
b=(1,1,1,2,2,3,3,3,3,3,3);
I tried with
b(1:length(a))=1;
for i=2:length(a)
if isequal(a(i),a(i-1));
b(i)=b(i-1);
else
b(i)=i+1;
end
end
(but that is not the expected result)

 채택된 답변

Star Strider
Star Strider 2015년 6월 12일

2 개 추천

Create it as a cell array, and use unique. It will give you almost what you want, however unique sorts the results, so they will not be exactly in the order you specified:
a={'465465465','465465465','465465465','31546895489','31546895489','897897979','897897979', '897897979','897897979','897897979','897897979'}';
[as,~,ic] = unique(a);
The ‘as’ vector gives you the sorted results, and ‘ic’ will give the corresponding indices in the order they appear in ‘a’.

댓글 수: 2

Konstantinos Sofos
Konstantinos Sofos 2015년 6월 12일
편집: Konstantinos Sofos 2015년 6월 12일
I agree with the above solution with a small remark. If you want to have your b vector exactly in the order that you asked you should use
[~,~,b] = unique(a,'stable')
then the result will be
b =
1 1 1 2 2 3 3 3 3 3 3
Star Strider
Star Strider 2015년 6월 12일
Forgot about 'stable'. Thanks!

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

Aleksandar
Aleksandar 2015년 6월 12일

0 개 추천

Thank you!!

카테고리

도움말 센터File Exchange에서 Logical에 대해 자세히 알아보기

제품

질문:

2015년 6월 12일

댓글:

2015년 6월 12일

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by