作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个大型 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
...
Date
是datenum
形式的日期。
我需要对唯一的 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()
, 最后取 @nanmean
与 accumarray()
:
% 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/
我有一个大型 Matlab 数据集(1,924,014 x 5;~73.4 MB) Date id a b c ...
我是一名优秀的程序员,十分优秀!