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

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