# 14.5: cell array

$$\newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} }$$ $$\newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}}$$$$\newcommand{\id}{\mathrm{id}}$$ $$\newcommand{\Span}{\mathrm{span}}$$ $$\newcommand{\kernel}{\mathrm{null}\,}$$ $$\newcommand{\range}{\mathrm{range}\,}$$ $$\newcommand{\RealPart}{\mathrm{Re}}$$ $$\newcommand{\ImaginaryPart}{\mathrm{Im}}$$ $$\newcommand{\Argument}{\mathrm{Arg}}$$ $$\newcommand{\norm}[1]{\| #1 \|}$$ $$\newcommand{\inner}[2]{\langle #1, #2 \rangle}$$ $$\newcommand{\Span}{\mathrm{span}}$$ $$\newcommand{\id}{\mathrm{id}}$$ $$\newcommand{\Span}{\mathrm{span}}$$ $$\newcommand{\kernel}{\mathrm{null}\,}$$ $$\newcommand{\range}{\mathrm{range}\,}$$ $$\newcommand{\RealPart}{\mathrm{Re}}$$ $$\newcommand{\ImaginaryPart}{\mathrm{Im}}$$ $$\newcommand{\Argument}{\mathrm{Arg}}$$ $$\newcommand{\norm}[1]{\| #1 \|}$$ $$\newcommand{\inner}[2]{\langle #1, #2 \rangle}$$ $$\newcommand{\Span}{\mathrm{span}}$$$$\newcommand{\AA}{\unicode[.8,0]{x212B}}$$

By Carey A. Smith

An ordinary array of strings can be created when all of the strings are the same length.

Cell arrays are useful for containing multiple character strings of different lengths.

##### Example $$\PageIndex{1}$$ String Array Shape Comparison

%% String_array_comparison_demo
clear all, format compact, format shortg; close all; fclose all; clc;
% A string array can only be created in MATLAB if every string is the same length.

% If you try to create an array with strings of different lengths, MATLAB generates an error.

% Octave, however, will automatically pad the short strings with blanks, in order to avoid an error.
% The shapes in this example are listed in order of the number of sides.
% All the strings have been abbreviated to 3 characters,
% so that an array can be created.
shapes = ['cir' % circle (1 side)
'ban' % banana (2 sides)
'tri' % triangle (3 sides)
'squ' % square (4 sides)
'pen' % pentagon (5 sides)
'hex']; % hexagon (6 sides)
[n, m] = size(shapes)
%% Input shape name.
disp('Shapes to choose from:')
disp('triangle')
disp('square')
disp('hexagon')
disp('circle')
disp('banana')
in_shape = input('Enter the name of a shape (without quotes): ','s')

%% Match the input to the shapes array
tf = 0; % True/False
for k = 1:n
% Compare the first 3 letters of the input shape name
% to each of the names in the shapes array.
tf = strcmpi(in_shape(1:3), shapes(k,:)); % case insensitive
if(tf == 1) % If True
disp(['A ',in_shape,' has ',num2str(k),' sides.'])
break;
end
end
if(tf == 0)
disp(['No match was found for ',in_shape])
end

###### Solution

.

Cell arrays can contain character strings of different lengths.

Cell arrays are defined by using { } ("squiggly brackets", a.k.a. "curly brackets". a.k.a. "curly braces")

The following example demonstrates how to create and use a cell array.

##### Example $$\PageIndex{2}$$ Cell Array Name Comparison

%% Cell_array_demonstration.m
clear all, format compact, format shortg; close all; fclose all; clc;
% MATLAB "cell arrays" allow character strings of various lengths
% to be stored in the same array.

%% This is an example of how to create a cell array.
% Note that cell arrays use squiggly brackets { }, instead of
% the square brackets [ ], used by numerical arrays.
names = {'Steven'
'Matt'
'Giovanni'
'Ashanti'
'Meagan'
'Gabriela'
'Peggy'}
names_len = length(names);
%% This shows how a cell array can be used
% [1 pt] Ask the use to enter a name
name_in = input('Enter a name from the list above (without quotes): ','s');

%% Search for match of name_in to one of those in the names list.
tf = 0; % True/False
for k = 1:names_len
name_k = names{k};
tf = strcmpi(name_in, name_k); % case insensitive comparison
if(tf == 1) % If True
disp([name_in,' is number ',num2str(k),' in the list.'])
break;
end
end
if(tf == 0)
disp(['No match was found for ',name_in])
end

###### Solution

Cell arrays can also be used as parts of structures.

##### Exercise $$\PageIndex{1}$$ Cell Array of South American Countries

Make a cell array called South_American_Countries.

You can find a link to these countries at List of South American Countries (Links to an external site.)

In this list, put the countries called "Sovereign states" in your cell array. Do not include the territories, which are listed below the Sovereign states.

Then add this code to display the 3rd and 7th countries in your cell array:

South_American_Countries{3} % Note that you need squiggly brackets to access members of a cell array.
South_American_Countries{7}

(If your cell array has a different name, use that name.)

The answer is not given here.

.

Cell arrays can be used to create a two-lin title, as shown in this example:

##### Example $$\PageIndex{1}$$ Cell Arrays in Figure Titles

%% Two-ltne title with a cell array in MATLAB. (Doesn't work in Octave.)
% Mimic 70 dice rolls.
% Create a vector with uniform random numbers between 1 and 6.
nn = 70
dd = randi(6,1,70); % dice roll values

% Plot a histogram
figure;
bin_edges= (1:7)-0.5;
histogram(dd,bin_edges);
%Compute the mean of the vector.
mdice = mean(dd)
%Compute the standard deviation of the vector.
sdice = std(dd)

% Create a two line title using 2 cell arrays
title({[num2str(nn),' Dice Rolls']}, ...
{['Mean= ',num2str(mdice),', Std. Dev.= ',num2str(sdice)]});