Find the maximum value in each group of a big matrix
7 次查看(过去 30 天)
显示 更早的评论
I have a big matrix and I'm looking for an easy way to group them by a certain way then find the maximum in each group. I have created this code but I got stuck. Anyway to help please. I need to know the indexes of all the maximum points to extract more information from the big matrix.
data = randn(10,1)*10;
edges = 0:5:35';
Y = discretize(data,edges);
[B,I] = sort(Y);
SortedMatrix = [B data(I)];
5 个评论
Jan
2019-4-26
编辑:Jan
2019-4-26
So is sortedMatrix your actual input data? Or do you want to process data, which is set to a random array for a demonstration?
It would be easier, if you avoid to create the NaNs, e.g. by adding a final edge Inf. Then splitapply(@max, data(I), B) would solve the problem.
采纳的回答
Jan
2019-4-26
编辑:Jan
2019-4-26
data = randn(10,1)*10;
edges = [-Inf, 0:5:35, Inf];
Y = discretize(data, edges);
Result = accumarray(Y, data, [], @max)
I'm confused that this does not work reliably with splitapply:
Result = splitapply(@max, data, Y)
It fails with an error message, if an interval is empty:
For N groups, every integer between 1 and N must occur at least
once in the vector of group numbers.
2 个评论
Rik
2019-4-26
I was thinking way too complicated here. This was the start of my idea:
nanflag=false;
if any(isnan(B))
replaceNaN=max(B)+1;
B(isnan(B))=replaceNaN;
nanflag=true;
end
b=accumarray(B,Y,[],@max,NaN);
After which removal of empty lines (and putting back the NaN) to get to the desired output should be easy.
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Creating and Concatenating Matrices 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!