Accumarray help: extracting matrix min/max based on values in first column.
조회 수: 3 (최근 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 Preprocessing에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!