Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

When is it appropriate to use a cell array vs. a struct in Matlab?

If I want to store some strings or matrices of different sizes in a single variable, I can think of two options: I could make a struct array and have one of the fields hold the data,

structArray(structIndex).structField

or I could use a cell array,

cellArray{cellIndex}

but is there a general rule-of-thumb of when to use which data structure? I'd like to know if there are downsides to using one or the other in certain situations.

like image 786
CJS Avatar asked Sep 03 '10 13:09

CJS


People also ask

What is the difference between cell array and structure in MATLAB?

A structure array is a data type that groups related data using data containers called fields. Each field can contain any type of data. A cell array is a data type with indexed data containers called cells, where each cell can contain any type of data.

What does struct do in MATLAB?

The struct function copies the properties of obj to the fields of a new scalar structure. The struct function does not create a structure from most of the fundamental data types. For example, if obj has the double or char data type, then struct issues an error message.

How do you use a cell array in MATLAB?

Create Cell Array Each cell contains a piece of data. To refer to elements of a cell array, use array indexing. You can index into a cell array using smooth parentheses, () , and into the contents of cells using curly braces, {} . Create a cell array that contains several temperature readings taken on a given date.


2 Answers

In my opinion it's more a matter of convenience and code clarity. Ask yourself would you prefer to refer your variable elements by number(s) or by name. Then use cell array in former case and struct array in later. Think about it as if you have a table with and without headers.

By the way you can easily convert between structures and cells with CELL2STRUCT and STRUCT2CELL functions.

like image 95
yuk Avatar answered Oct 06 '22 13:10

yuk


If you use it for computation within a function, I suggest you use cell arrays, since they're more convenient to handle, thanks e.g. to CELLFUN.

However, if you use it to store data (and return output), it's better to return structures, since the field names are (should be) self-documenting, so you don't need to remember what information you had in column 7 of your cell array. Also, you can easily include a field 'help' in your structure where you can put some additional explanation of the fields, if necessary.

Structures are also useful for data storage since you can, if you want to update your code at a later date, replace them with objects without needing to change your code (at least in case you did pre-assignment of your structure). They have the same sytax, but objects will allow you to add more functionality, such as dependent properties (i.e. properties that are calculated on the fly based on other properties).

Finally, note that cells and structures add a few bytes of overhead to every field. Thus, if you want to use them to handle large amounts of data, you're much better off to use structures/cells containing arrays, rather than having large arrays of structures/cells where the fields/elements only contain scalars.

like image 43
Jonas Avatar answered Oct 06 '22 13:10

Jonas