は、私は、例えば、文字列配列を持っている:最も頻繁要素、MATLAB
arr = ['hello'; 'world'; 'hello'; 'again'; 'I----'; 'said-'; 'hello'; 'again']
は、どのように私は、この例では'hello'
で最も頻繁に文字列を抽出することができますか?
は、私は、例えば、文字列配列を持っている:最も頻繁要素、MATLAB
arr = ['hello'; 'world'; 'hello'; 'again'; 'I----'; 'said-'; 'hello'; 'again']
は、どのように私は、この例では'hello'
で最も頻繁に文字列を抽出することができますか?
まずステップ、セル配列ではなく、文字列の配列を使用します。
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));
セル配列とregexp関数を使う方が良いです。文字列配列の振る舞いは期待通りではないかもしれません。あなたは
hellos = sum(~cellfun('isempty', regexp(arr, 'hello')));
を使用する場合は
arr = {'hello', 'world'; 'hello', 'again'; 'I----', 'said-'; 'hello', 'again'};
それはセル配列arr
に'hello'
年代の数を返します。
-1:特定の所定の文字列ではない。 –
そして、特定の文字列を探していたとしても、 'regexp'はちょっと残酷かもしれません。 'strcmp'は、セル配列内の等しい文字列を識別するために使用できます。 – kwatford
+1:しかし、セル配列の必要はありません。 'unique(arr、 'rows')'を使うことができます。 –
ああ、ありがとう!私はそれらを頻繁に使用せず、この機能を知らなかった。 –
文字列配列と上記のコメントに関する注記:この例では、文字列は1行に2つの文字列を持たせようとするのではなく、各文字列が別々の行になるように再フォーマットする必要があります。そうでなければMatlabは行全体を単一の連結文字列と見なします。すなわち、質問の最初の 'arr'は' ['helloworld'、 'helloagain';、 'I ---- said - '; 'helloagain'] ' –