Table of Contents
Understanding Structures in MATLAB
Structures in MATLAB let you group related pieces of data together under one variable name, but with named parts called fields. Unlike arrays and tables, structures are very flexible. Each field can hold data of different sizes and different types. This makes structures useful when your data does not fit neatly into regular rows and columns.
A structure is created by assigning to a field using the dot syntax. The general pattern is structName.fieldName. For example, you can create a structure to store information about a student like this:
student.name = "Alice";
student.id = 12345;
student.grade = 92.5;
student.passed = true;
After these assignments, student is a structure with four fields: name, id, grade, and passed. You can view the fields with the fieldnames function:
fieldnames(student)
This returns a cell array of field names. The type of a structure in MATLAB is struct. You can check this with class(student).
You can also create an empty structure and then add fields later. For example:
course = struct();
course.title = "Intro to MATLAB";
course.credits = 3;
Or you can use the struct function directly to create a structure and set fields in one step:
student = struct( ...
"name","Bob", ...
"id",54321, ...
"grade",88.0, ...
"passed",true);The order of the fields does not usually matter in MATLAB, but you must use the correct field names when you access or modify them.
Accessing and Modifying Structure Fields
Structure fields are accessed with the dot operator. Once you have a structure, you can read or change individual fields easily. Continuing the earlier example, to read the grade of student, you write:
g = student.grade;To update the grade you can assign a new value:
student.grade = 95.0;If you assign to a field name that does not exist yet, MATLAB creates that new field:
student.email = "alice@example.com";
Now student has an email field as well. To remove a field from a structure, you can use the rmfield function:
student = rmfield(student,"email");
This returns a new structure without the given field. Remember to assign the result back, or store it in a new variable, because rmfield does not change the structure in place unless you capture the output.
Sometimes you might want to access a field using a variable that contains the field name, rather than writing the name directly. MATLAB provides dynamic field names for this purpose. You write the field name in parentheses after a dot. For example:
fname = "grade";
value = student.(fname);
This reads the grade field using the string stored in fname. You can also assign through dynamic field names:
fname = "name";
student.(fname) = "Carla";Dynamic field names are especially useful in more automated code, where field names might be calculated or read from a file.
Structure Arrays
A single structure can hold several fields for one item. Often you want to store many similar items that all have the same set of fields. For this, you can use a structure array. This is an array where each element is a structure with the same fields.
To create a structure array, you can use indexing, just like with numeric arrays, but assign each element as a structure. For example, to store multiple students:
students(1).name = "Alice";
students(1).id = 1001;
students(1).grade = 92.5;
students(2).name = "Bob";
students(2).id = 1002;
students(2).grade = 88.0;
Now students is a 1-by-2 structure array. Each element students(1) and students(2) is itself a structure with fields name, id, and grade. All elements of a structure array should usually share the same fields. MATLAB does not enforce this strictly, but it is a good habit, because many functions that work on structure arrays assume consistent fields.
You can also create structure arrays by using the struct function with array values in its arguments:
names = ["Alice","Bob","Charlie"];
ids = [1001 1002 1003];
grades = [92.5 88.0 79.5];
students = struct( ...
"name", names, ...
"id", num2cell(ids), ...
"grade", num2cell(grades));
In this example, students becomes a 1-by-3 structure array. The num2cell function is used so that each element of ids and grades becomes a separate value for each structure. You can check the size of the structure array with size(students).
When you access a field from a structure array using dot syntax, MATLAB can return data from all elements at once. For instance:
allGrades = [students.grade];
This gives a numeric array containing the grade from each element. Here the brackets [...] concatenate the values into a simple array.
Working with Structure Arrays
Once you have a structure array, you can access individual elements and their fields using both indexing and dot notation together. To read the name of the second student, you write:
secondName = students(2).name;You can modify fields in specific elements as well:
students(3).grade = 85.0;
You can also use colon syntax for ranges. For example, to get the id field of the first three students: