Stuart’s MATLAB Videos

Watch and Learn

Generalizing the access to an array of structures in MATLAB

Recently a MATLAB user asked me how to make it possible to work with an array of structures in such a way that she could filter the array of structures and then combine the remaining fields. Once combined she would run arbitrary processing functions on this combined data.

This generalized architecture allows her to not use switch case and other flow control. The strings that represent the fields of interest could come from a GUI making her GUI able to process in many arbitrary and customizable ways.

Here is the code from the post:

s(1).condition = 1;
s(2).condition = 1;
s(3).condition = 2;
s(4).condition = 2;

s(1).velocity = [11:21];
s(2).velocity = [22:32];
s(3).velocity = [33:43];
s(4).velocity = [44:54];

s(1).acceleration = [111:121];
s(2).acceleration = [122:132];
s(3).acceleration = [133:143];
s(4).acceleration = [144:154];

fieldToFilterBy    = 'condition';
valueToFilterBy    = 2;
fieldToProcess     = 'acceleration';
processingFunction = @mean;

listOfFilterValues    = [s.(fieldToFilterBy)];
vi                    = (listOfFilterValues == valueToFilterBy)
filteredStructure     = s(vi)
mergedFieldOfInterest = [filteredStructure(:).(fieldToProcess)]
processedFilteredData = feval(processingFunction, mergedFieldOfInterest)
  • print


댓글을 남기려면 링크 를 클릭하여 MathWorks 계정에 로그인하거나 계정을 새로 만드십시오.