MATLAB: Add row and column headers to 3d matrix

3dheader

Hi
I'm trying to find a simple solution to add column and row headers. So I have:
Z(164,167,59) -3d matrix
names(1×164)-row header
names2(1×167) -column header
I tested to see if i can do a 2d and was going to add a loop using a horzcat as such:
ZHDR=[names2;Z(:,:,1)]
Thank you for any help.
Kevin

Best Answer

This example creates row and column headers and puts your data and the headers into a cell array.
% Create fake data
Z = rand(164, 167, 59);
% Generate headers
rowhead = strsplit(sprintf('row%d ', 1:size(Z,1)))'; %Column vector (ie, {'row1', 'row2', 'row3', ...})
rowhead(end) = [];
colhead = strsplit(sprintf('col%d ', 1:size(Z,2))); %Row vector (ie, {'col1', 'col2', 'col3', ...})
colhead(end) = [];
% Put matrix in a cell array, add headers. The upper left corner (Zc(1,1) will be empty)
Zc = cell(size(Z) + [1 1 0]); %Create emtpy cell
Zc(2:end, 1, :) = repmat(rowhead, 1, size(Z,3)); %Place row headers in left "wall" of the 3D array.
Zc(1, 2:end, :) = repmat(colhead, size(Z,3), 1)'; %Place col headers in upper "ceiling" of 3D array.
Zc(2:end, 2:end, :) = num2cell(Z); %Fill the cell array with your data (time killer!)
% Test it
Zc(1,5) %this should be col 4
Zc(21,1) % this should be row 20