mat
mat

Reputation: 2617

Most efficient way to store numbers as strings inside a table

I want to store efficiently some numbers as strings (with different lengths) into a table. This is my code:

% Table with numbers
n = 5;
m = 5;
T_numb = array2table((rand(n,m)));

% I create a table with empty cells (to store strings)
T_string = array2table(cell(n,m));

for i = 1:height(T_numb)
   for ii = 1:width(T_numb)
      T_string{i,ii} = cellstr(num2str(T_numb{i,ii}, '%.2f'));
   end
end

What could I do to improve it? Thank you.

Upvotes: 1

Views: 47

Answers (2)

Divakar
Divakar

Reputation: 221594

This seems to be quite fast -

T_string = cell2table(reshape(strtrim(cellstr(num2str(A(:),'%.2f'))),size(A)))

Or with regexprep to replace strtrim -

cell2table(reshape(regexprep(cellstr(num2str(A(:),'%.2f')),'\s*',''),size(A)))

Here, A is the 2D input numeric array.

Upvotes: 2

Benoit_11
Benoit_11

Reputation: 13945

I don't have access to the function cell2table right now, but using the undocumented function sprintfc might work well here (check here for details).

For instance:

%// 2D array
a = magic(5)

b = sprintfc('%0.2f',a)

generates a cell array like this:

b = 

    '17.00'    '24.00'    '1.00'     '8.00'     '15.00'
    '23.00'    '5.00'     '7.00'     '14.00'    '16.00'
    '4.00'     '6.00'     '13.00'    '20.00'    '22.00'
    '10.00'    '12.00'    '19.00'    '21.00'    '3.00' 
    '11.00'    '18.00'    '25.00'    '2.00'     '9.00' 

which you can convert to a table using cell2table.

So in 1 line:

YourTable = cell2table(sprintfc('%0.2f',a))

Upvotes: 3

Related Questions