Accumarray help: extracting matrix min/max based on values in first column.
1 次查看(过去 30 天)
显示 更早的评论
I have a matrix of 44222x4 with columns of date, time, flow, and pH respectively. I was trying to use accumarray to sort the min and max pH values for each date. My code is C=accumarray(matrix(:,1),(matrix(:,4),[],@(n){n}).
One of the large problems I have is with accumarray not accepting my matrix(:,4) as a numeric vector. Error text: "Second input VAL must be a full numeric, logical, or char vector or scalar."
0 个评论
采纳的回答
Razvan Carbunescu
2018-4-25
For this case the type of the data is probably what is giving you the problem.
T = array2table(matrix,'VariableNames',{'date', 'time', 'flow', 'pH'});
GT = groupsummary(T,'date',{'min', 'max'},'pH');
[idx,dates] = findgroups(matrix(:,1));
min_pH = splitapply(@min,matrix(:,4),idx);
max_pH = splitapply(@max,matrix(:,4),idx);
0 个评论
更多回答(1 个)
Stephen23
2018-4-24
Why not just calculate the min/max directly using accumarray?:
[~,~,idx] = unique(matrix(:,1));
accumarray(idx,matrix(:,4),[],@min)
accumarray(idx,matrix(:,4),[],@max)
3 个评论
Stephen23
2018-4-25
编辑:Stephen23
2018-4-25
@Evan Watts: you have not told us what class matrix is, but I suspect that it might be a cell array, in which case you will need to convert it to a numeric array before using accumarray. How to convert it depends on how the data is stored inside it: as char vectors, or a numeric values:
vec = str2double(matrix(:,4)); % char vectors vec = cell2mat(matrix(:,4)); % numeric scalars
If you do not have a cell array then you need to tell us what the class is:
class(matrix)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Data Type Conversion 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!