отображать все элементы во вложенном массиве ячеек (с целочисленными записями)

Это связано с постом

отобразить все элементы во вложенном массив ячеек (с символьными записями)

с изменением, где записи являются символами. Для ясности был задан новый вопрос.

Сейчас :

a =

{1x10 cell}    {1x10 cell}    {1x10 cell}    {1x10 cell}

a{:}=

ans = [0]    [0.4000]    [0]    [0]    [0]    [0]    [0]    [0]    [0]    [0]

ans = [0]    [0]    [0.2000]    [0]    [0.2000]    [0]    [0.2000]    [0]    [0]    [0]

ans = [0]    [0]    [0]    [0]    [0]    [0.2000]    [0]    [0]    [0.2000]    [0.2000]

ans = [0]    [0.2000]    [0]    [0]    [0]    [0]    [0]    [0.4000]    [0]    [0.2000]

ответ на предыдущий был:

fileID = fopen('a.txt', 'at');
fprintf(fileID, '%2.8s \n', cellfun(@(x) char(x), a));
fclose(fileID);

Как решить это сейчас? хотите напечатать:

           0  0.4  0    0  0   0  0   0  0  0
           0  0    0.2  0  0.2 0  0.2 0  0  0
           .
           . 

Спасибо


person pac    schedule 14.04.2012    source источник


Ответы (2)


Это один из способов сделать это:

a = { { 0, 0.4000, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0.2000, 0, 0.2000, 0, 0.2000, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0.2000, 0, 0, 0.2000, 0.2000 }, { 0, 0.2000, 0, 0, 0, 0, 0, 0.4000, 0, 0.2000 }};

fileID = fopen('a.txt', 'at');

fprintf(fileID, [ (regexprep((regexprep((regexprep((regexprep(mat2str(cell2mat(cellfun(@cell2mat, a, 'UniformOutput', false)')), '(0 )' , '$1  ')), '[', '')), ']', '')), ';', '\n')), '\n' ]);

fclose(fileID);

Изменить: альтернативное решение. В этом более короткие строки дополнены пробелами.

CharMatrix = char(regexprep(cellfun(@mat2str, (cellfun(@cell2mat, a, 'UniformOutput', false)'), 'UniformOutput', false), '0 ', '0   '));
CharMatrix(CharMatrix == ']') = ' ';
CharMatrix(:,1) = [];
CharMatrix(:,end) = '\';
CharMatrix(:,end+1) = 'n';
fileID = fopen('a.txt', 'at');
fprintf(fileID, reshape(CharMatrix', 1, []));
fclose(fileID);
person nrz    schedule 14.04.2012
comment
спасибо @nrz. Ну, просто чтобы отдать должное всему приведенному выше ответу, он тоже был правильным - person pac; 14.04.2012

Кажется, я припоминаю, что если вы поместите значения в массив, он сделает преобразование соответствующим образом. У меня нет Matlab, чтобы проверить это, но это должно сработать.

[a{:}]
person PearsonArtPhoto    schedule 14.04.2012