Discover MakerZone

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn more

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today

To resolve issues starting MATLAB on Mac OS X 10.10 (Yosemite) visit: http://www.mathworks.com/matlabcentral/answers/159016

add numerical array as column or in cell array

Asked by Paul on 23 Nov 2012

How to add a numerical array

 a=[1 2 3 4]

as row into my cell

 C = |'a' 'b' 'c' 'd'|
     |'e' 'f' 'g' 'h'|
     |'i' 'j' 'k' 'l'|
     |'m' 'n' 'o' 'p'|

so, that

 C = |'1' '2' '3' '4'|
     |'a' 'b' 'c' 'd'|
     |'e' 'f' 'g' 'h'|
     |'i' 'j' 'k' 'l'|
     |'m' 'n' 'o' 'p'|

or as new column into cell C:

C = |'1' 'a' 'b' 'c' 'd'|
    |'2' 'e' 'f' 'g' 'h'|
    |'3' 'i' 'j' 'k' 'l'|
    |'4' 'm' 'n' 'o' 'p'|

(the numerical values become strings).

AND: How to transform for example a 2x4 cell into a 1x8 (or 8x1) cell:

 C= |'a' 'b' 'c' 'd'|       ----> C = |'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h'|
    |'e' 'f' 'g' 'h'|   
                         or:----> C = |'a'|
                                      |'e'|
                                      |'b'|
                                      |'f'|
                                      |'c'|
                                      |'g'|
                                      |'d'|
                                      |'h'|

I can solve these problems with for-loops, but imagine you have a huge size of the cell array, it is not very efficient. Is there an easier way? Thanks!

0 Comments

Paul

Products

No products are associated with this question.

2 Answers

Answer by Jan Simon on 23 Nov 2012
Edited by Jan Simon on 23 Nov 2012
Accepted answer
C = {'a' 'b' 'c' 'd'; ...
     'e' 'f' 'g' 'h'; ...
     'i' 'j' 'k' 'l'; ...
     'm' 'n' 'o' 'p'};
a     = [1 2 3 4];
tmp   = sprintf('%g*', a);
tmp(end) = [];
aC    = regexp(tmp, '*', 'split');
C_row = cat(1, aC,  C);  % Insert as row
C_col = cat(2, aC', C);  % Insert as column
C2 = reshape(transpose(C), 1, [])
C3 = reshape(C, [], 1)

0 Comments

Jan Simon
Answer by Azzi Abdelmalek on 23 Nov 2012
Edited by Azzi Abdelmalek on 23 Nov 2012
 C = {'a' 'b' 'c' 'd'
      'e' 'f' 'g' 'h'
      'i' 'j' 'k' 'l'
      'm' 'n' 'o' 'p'}
 a=[1 2 3 4]
 out=[num2cell(a); C]

%or

 out=[num2cell(a')  C]

% for third case

 out=C(:)'

%or

 out=reshape(C,1,[])

2 Comments

Jan Simon on 23 Nov 2012

@Azzi: Paul asked for "the numerical values become strings", but NUM2CELL replies {1,2,3,4} instead of the wanted {'1', '2', '3', '4'}.

Azzi Abdelmalek on 23 Nov 2012

Ok Simon,

outv=[arrayfun(@(x) cellstr(num2str(x)),a); C]

or

outh=[arrayfun(@(x) cellstr(num2str(x)),a)'  C]
Azzi Abdelmalek

Contact us