在Matlab中查找单元格数组中不同值的出现

时间:2012-02-10 13:28:49

标签: arrays matlab count distinct

我有两列数据文件('date'和'user'):

date1 user1
date1 user1
date1 user2
date2 user1
date2 user2
...

我需要找到每个唯一用户在特定日期执行操作的次数。我知道我可以使用unique()函数来查找整个不同的用户,然后运行for循环遍历所有行,检查是否相等然后总结,但问题是我有超过8mln行并运行double循环它会太贵了。

是否有其他方法可以计算每个用户的日期出现次数?

2 个答案:

答案 0 :(得分:2)

请始终说明您要处理的数据类型,最好使用example

我假设用户和日期都是在单元格数组中组合的字符串。

tbl = { 'date1' 'user1'
        'date1' 'user1'
        'date1' 'user2'
        'date2' 'user1'
        'date2' 'user2' };

将2列合并为一个:

user_date = strcat(tbl(:,2),'@',tbl(:,1));

然后你可以计算出现次数:

[gi,g] = grp2idx(user_date);
n = histc(gi,1:numel(g));

g = 

'user1@date1'
'user2@date1'
'user1@date2'
'user2@date2'

n =

     2
     1
     1
     1

注意grp2idx

需要MATLAB Statistics Toolbox

答案 1 :(得分:0)

如果我理解正确,请查看以下代码:

% Your data
A = [1 9; 8 5; 5 9; 8 5; 9 9];
date = 8;
user = 5;

% Find how many times each unique user did the action at the certain date
nb_occurences = size(A, 1) - size((setdiff(A, [date user], 'rows')), 1);

需要缓存大小(A,1)(不确定MATLAB是否会为您执行此操作)。