How to enumerate an array?
15 ビュー (過去 30 日間)
古いコメントを表示
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)
0 件のコメント
採用された回答
Star Strider
2015 年 6 月 12 日
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
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
その他の回答 (1 件)
参考
カテゴリ
Help Center および File Exchange で Logical についてさらに検索
製品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!