gpt4 book ai didi

matlab - 大型数据集上更快的 grpstats

转载 作者:行者123 更新时间:2023-12-04 02:53:03 27 4
gpt4 key购买 nike

我有一个大型 Matlab 数据集(1,924,014 x 5;~73.4 MB)

Date          id            a           b           c
...
733234 1467 1.2656 1.2718 51.16
733235 1467 1.2732 1.2794 51.16
733236 1467 1.2781 1.2844 51.5
733236 1467 1.26 NaN NaN
733237 1467 1.3084 NaN NaN
733237 1467 1.3205 NaN NaN
733238 1467 1.3125 1.3188 53.85
733238 1467 1.3 NaN NaN
...

Datedatenum形式的日期。
我需要对唯一的 Date+id 对的最后三列进行平均(忽略 NaN),因为有时会有不止一行给定的 Date+id 对。

我想要的输出是

Date          id            mean_a      mean_b      mean_c
...
735234 1467 1.2656 1.2718 51.16
735235 1467 1.2732 1.2794 51.16
735236 1467 1.2691 1.2844 51.5
735237 1467 1.3144 NaN NaN
735238 1467 1.3062 1.3188 53.85
...

我希望能够使用

grpstats(myDataset, {'Date', 'id'}, 'mean')

但是速度太慢了。我预计这项任务可以在 60 秒内完成。我认为 grpstats 正在添加一个 GroupCount 列并为每个观察结果添加名称,这是我不需要的。

我怎样才能快速做到这一点?我对他们是否使用 grpstats 的想法持开放态度。

最佳答案

按日期和 ID 分组 unique(...,'rows') , 然后产生积累 subs对于 meshgrid() 的多列, 或者明确地使用 repmat() , 最后取 @nanmeanaccumarray() :

% Group by date and id
[un,~,pos] = unique(db(:,1:2),'rows');

% Produce row, col subs
[col,row] = meshgrid(1:3,pos);

% Accumulate
[un accumarray([row(:), col(:)], reshape(db(:,3:5),[],1),[],@nanmean)]

关于matlab - 大型数据集上更快的 grpstats,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17196140/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com