在 Matlab 元胞数组中查找不同值的出现次数

发布于 2025-01-04 08:08:50 字数 315 浏览 1 评论 0原文

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

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

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

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

I have a data file of two columns ('date' and 'user'):

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

I need to find how many times each unique user did the action at the certain date. I know I could use unique() function to find the whole distinct users and after to run the for loop through all the rows, check if equal and then sum up, but the problem is that I have more than 8mln rows and to run double loop it would be too expensive.

Is there any other way to count occurrences of date for each user?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

冷默言语 2025-01-11 08:08:50

请始终说明您正在处理的数据类型是什么,最好使用示例

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

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

注意 需要 MATLAB Statistics Toolbox grp2idx

Please always state what are the data types you are dealing with, better with an example.

I assume both users and dates are strings combined in a cell array.

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

Combine 2 columns into one:

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

Then you can count occurences:

[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

Note MATLAB Statistics Toolbox is required for grp2idx

〃安静 2025-01-11 08:08:50

如果我正确理解了这个问题,请查看以下代码:

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

If I understand the question correctly, check out the following code:

% 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);

Cache size(A, 1) is needed (not sure if MATLAB will do that for you).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文