Generalizing the Access to an Array of Structures in MATLAB
(Originally posted on Doug's MATLAB Video Tutorials blog.)
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:
clear
clc
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)
Recorded: 17 Apr 2013
Featured Product
MATLAB
Sélectionner un site web
Choisissez un site web pour accéder au contenu traduit dans votre langue (lorsqu'il est disponible) et voir les événements et les offres locales. D’après votre position, nous vous recommandons de sélectionner la région suivante : .
Vous pouvez également sélectionner un site web dans la liste suivante :
Comment optimiser les performances du site
Pour optimiser les performances du site, sélectionnez la région Chine (en chinois ou en anglais). Les sites de MathWorks pour les autres pays ne sont pas optimisés pour les visites provenant de votre région.
Amériques
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)
Asie-Pacifique
- Australia (English)
- India (English)
- New Zealand (English)
- 中国
- 日本Japanese (日本語)
- 한국Korean (한국어)