Search code examples
stringmatlabcell

Matlab: trasform to cell of strings


Problem: I have postfix (137x25) cell that contain cell of char (Ex postfix(6,8)=postfix{6,8}{1,1}<1x3char>). I want to trasform it in (137x25) cell of char.

Postfix is created in this way:

for l=1:25
    [matches(:,l), postfix(:,l)] = regexp(semanticTrajCompact(1,4).TrajCompact,sprintf('%d%d(.*)',digits{1}(l),digits{2}(l)),'match','once','tokens');
end

I have tried different solutions:

Solution 1

numIndex = cellfun('isclass', postfix, 'double');
  tmpStr = sprintf('%g;', postfix{numIndex});
  postfix(numIndex) = dataread('string', tmpStr, '%s', 'delimiter', ';');

Solution 2

postfix(cellfun(@isempty,postfix))={''};

Solution 3

postfix(cellfun(@isnumeric, postfix)) =  cellfun(@(x) sprintf('%.5f', x), postfix(cellfun(@isnumeric, postfix)), 'UniformOutput', false)

Solution 4

I try to use

char(postix)

Anyone of this solution trasform postfix in a (137x25 array of char). Can you give me other ideas?


Solution

  • You want to loop over every element of the cell array postfix, and replace each element of the cell array (which is a cell array itself) by its contents. Using cellfun to replace the loop, you therefore write:

    postfix = cellfun(@(x)x{1}, postfix, 'UniformOutput', false);