2013-07-03 15 views
7

は、私は、例えば、文字列配列を持っている:最も頻繁要素、MATLAB

arr = ['hello'; 'world'; 'hello'; 'again'; 'I----'; 'said-'; 'hello'; 'again'] 

は、どのように私は、この例では'hello'で最も頻繁に文字列を抽出することができますか?

答えて

12

まずステップ、セル配列ではなく、文字列の配列を使用します。

arr = {'hello', 'world'; 'hello', 'again'; 'I----', 'said-'; 'hello', 'again'}; 

第二に、(これは私がセルを提案する理由である文字列配列、上では動作しませんユニークな文字列を取得するために、独自の使用):

[unique_strings, ~, string_map]=unique(arr); 

そして、最も一般的な値を見つけるために、string_map変数にモードを使用します。

most_common_string=unique_strings(mode(string_map)); 
+4

+1:しかし、セル配列の必要はありません。 'unique(arr、 'rows')'を使うことができます。 –

+0

ああ、ありがとう!私はそれらを頻繁に使用せず、この機能を知らなかった。 –

+0

文字列配列と上記のコメントに関する注記:この例では、文字列は1行に2つの文字列を持たせようとするのではなく、各文字列が別々の行になるように再フォーマットする必要があります。そうでなければMatlabは行全体を単一の連結文字列と見なします。すなわち、質問の最初の 'arr'は' ['helloworld'、 'helloagain';、 'I ---- said - '; 'helloagain'] ' –

-1

セル配列とregexp関数を使う方が良いです。文字列配列の振る舞いは期待通りではないかもしれません。あなたは

hellos = sum(~cellfun('isempty', regexp(arr, 'hello'))); 

を使用する場合は

arr = {'hello', 'world'; 'hello', 'again'; 'I----', 'said-'; 'hello', 'again'}; 

それはセル配列arr'hello'年代の数を返します。

+2

-1:特定の所定の文字列ではない。 –

+0

そして、特定の文字列を探していたとしても、 'regexp'はちょっと残酷かもしれません。 'strcmp'は、セル配列内の等しい文字列を識別するために使用できます。 – kwatford

関連する問題