2013-07-03 71 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

关于字符串数组和上面的注释只是一个注释:在这种情况下,字符串需要重新格式化,以便每个字符串是一个单独的行,而不是试图在一行上有两个字符串 - 这只能作为一个单元格,否则Matlab认为整行是单个连接的字符串,即问题中的初始'arr'等价于'['helloworld','helloagain';,'I ---- said - ';'helloagain']' –

-1

最好使用单元阵列和regexp函数;字符串数组的行为可能不是你所期望的。

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

如果使用

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

将在单元阵列arr返回'hello'的数量。

+2

-1:问题是要找到最频繁的字符串,不是特定的预定字符串。 –

+0

即使你正在寻找一个特定的字符串,“regexp”会有点矫枉过正。 'strcmp'可以用来标识单元阵列中的相等字符串。 – kwatford