【问题标题】:Find occurrences of distinct values in cell array in Matlab在 Matlab 中查找单元格数组中不同值的出现
【发布时间】:2012-05-26 01:15:53
【问题描述】:

我有一个包含两列(“日期”和“用户”)的数据文件:

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

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

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

【问题讨论】:

  • 这个问题不好理解——你说的“行动”是什么意思?您的代码中没有对操作的引用。数组中的条目是“动作”吗?

标签: arrays matlab count distinct


【解决方案1】:

请始终说明您正在处理的数据类型是什么,最好使用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

【讨论】:

    【解决方案2】:

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

    % 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 是否会为您执行此操作)。

    【讨论】:

      猜你喜欢
      • 2015-05-27
      • 1970-01-01
      • 1970-01-01
      • 2014-03-22
      • 1970-01-01
      • 1970-01-01
      • 2012-11-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多