Mam tablicę ciągów, na przykład:Najczęstsze element tablicy ciągów, MATLAB
arr = ['hello'; 'world'; 'hello'; 'again'; 'I----'; 'said-'; 'hello'; 'again']
Jak można wyodrębnić najczęstszą ciąg, który jest 'hello'
w tym przykładzie?
Mam tablicę ciągów, na przykład:Najczęstsze element tablicy ciągów, MATLAB
arr = ['hello'; 'world'; 'hello'; 'again'; 'I----'; 'said-'; 'hello'; 'again']
Jak można wyodrębnić najczęstszą ciąg, który jest 'hello'
w tym przykładzie?
Pierwszy krok należy użyć tablicę komórek zamiast tablicy ciągów:
arr = {'hello', 'world'; 'hello', 'again'; 'I----', 'said-'; 'hello', 'again'};
drugie, wykorzystują unikatowe, aby uzyskać unikalne ciągów (to nie działa na tablicy ciągów, dlatego proponuję komórkę):
[unique_strings, ~, string_map]=unique(arr);
Następnie tryb wykorzystania na zmiennej string_map znaleźć najczęstsze wartości:
most_common_string=unique_strings(mode(string_map));
Lepiej używać macierzy komórek i funkcji regexp; zachowanie tablic ciągów może nie być tym, czego oczekujesz.
arr = {'hello', 'world'; 'hello', 'again'; 'I----', 'said-'; 'hello', 'again'};
Jeśli używasz
hellos = sum(~cellfun('isempty', regexp(arr, 'hello')));
zwróci liczbę 'hello'
„s w macierzy komórkowej arr
.
-1: Pytanie dotyczy znalezienia najczęstszego ciągu znaków, nie określony określony z góry ciąg znaków. –
Nawet jeśli szukałeś konkretnego ciągu, 'regexp' byłoby trochę przesadzone. 'strcmp' może być użyty do identyfikacji równych ciągów w tablicy komórek. – kwatford
+1: ale nie ma potrzeby tworzenia tablic komórek. Możesz użyć 'unique (arr, 'rows')'. –
Oh świetnie, dzięki! Nie używam ich bardzo często, nie znałem tej funkcji. –
Po prostu uwaga na temat tablic sznurkowych i powyższego komentarza: w tym przypadku ciąg musiałby zostać ponownie sformatowany, aby każdy ciąg był osobnym wierszem, zamiast próbować mieć dwa ciągi na jednej linii - działa to tylko jako komórka , w przeciwnym razie Matlab traktuje całą linię jako pojedynczy połączony ciąg znaków, tzn. początkowe "arr" w pytaniu jest równoważne "[" helloworld "," helloagain ";," I ---- said "," helloagain "] –