chinkare_16
chinkare_16

Reputation: 135

cell array of strings to matrix

A = {'a','b','c','b','a',...}

A is a <1X400> cell array and I want to create a matrix from A such that if the cell is a, the matrix shows 1, if it is b, it shows as 2 in the matrix and 3 for c.

Thank you.

Upvotes: 0

Views: 143

Answers (3)

Luis Mendo
Luis Mendo

Reputation: 112759

That's easy:

result = cell2mat(A)-'a'+1

For a generic association of letters to numbers 1,2,3...:

letters2numbers = 'abc'; %// 'a'->1, 'b'->2 etc.
[~, result] = ismember(cell2mat(A), letters2numbers)

For a generic association of strings to numbers 1,2,3...:

strings2numbers = {'hi', 'hello', 'hey', 'good morning', 'howdy'};
A = {'hello', 'hi', 'hello', 'howdy', 'bye'};
[~, result] = ismember(A, strings2numbers)

In this example,

result =
     2     1     2     5     0 

Upvotes: 2

Divakar
Divakar

Reputation: 221684

Specific Case

For a simple specific case as listed in the question, you can use char to convert all the cell elements to characters and then subtract 96 from it, which is ascii equivalent of 'a'-1 -

A_numeric = char(A)-96

Sample run -

>> A
A = 
    'a'    'b'    'c'    'b'    'a'
>> A_numeric = char(A)-96
A_numeric =
     1
     2
     3
     2
     1

Generic Case

For a generic substitution case, you need to do a bit more of work like so -

%// Inputs
A = {'correct','boss','cat','boss','correct','cat'}
newcellval = {'correct','cat','boss'}
newnumval = [8,2,5]

[unqcell,~,idx]  = unique(A,'stable')
[~,newcell_idx,unqcell_idx] = intersect(newcellval,unqcell,'stable')
A_numeric = newnumval(changem(idx,newcell_idx,unqcell_idx))

Sample input-output -

>> A,newcellval,newnumval
A = 
    'correct'    'boss'    'cat'    'boss'    'correct'    'cat'
newcellval = 
    'correct'    'cat'    'boss'
newnumval =
     8     2     5
>> A_numeric
A_numeric =
     8     5     2     5     8     2

Upvotes: 4

Amol Saindane
Amol Saindane

Reputation: 1598

use a For Loop which iterate over A and convert character to number

for loop = 1:length(A)
  outMat(loop) = char(A(loop)) - 96
end

I hope it works.

Upvotes: 1

Related Questions