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."

채택된 답변

Razvan Carbunescu
Razvan Carbunescu 2018년 4월 25일
For this case the type of the data is probably what is giving you the problem.
In R2018a you can use groupsummary to get these results, if you put the data into a table:
T = array2table(matrix,'VariableNames',{'date', 'time', 'flow', 'pH'});
GT = groupsummary(T,'date',{'min', 'max'},'pH');
If using an earlier release can probably use findgroups / splitapply for the workflow:
[idx,dates] = findgroups(matrix(:,1));
min_pH = splitapply(@min,matrix(:,4),idx);
max_pH = splitapply(@max,matrix(:,4),idx);

추가 답변 (1개)

Stephen23
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
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)
Evan Watts
Evan Watts 2018년 4월 25일
Thanks! I with both of the answers here I was able to get it to work.

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Data Preprocessing에 대해 자세히 알아보기

태그

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by