текстовый формат импорта matlab - PullRequest
0 голосов
/ 19 февраля 2011

Текстовый файл выглядит следующим образом.

  1      1     0       
  2      1     3     
         2     9     
         3    10      
  3      1     1     

Когда я использую importdata, чтобы импортировать файл и получить следующий формат;

1   1   0
2   1   3
2   9   NaN
3   10  NaN
3   1   1

То, что я на самом деле хочу, это

  1      1     0       
  2      1     3     
NaN      2     9     
NaN      3    10      
  3      1     1    

Есть ли удобный способ? или я должен сделать tab между каждым числом перед импортом, чтобы позволить matlab распознать, что первым элементом является NaN? Спасибо!

Редактировать

Я проверил и обнаружил, что если разделитель tab и его формат правильный. Мне интересно, есть ли другой легкий подход? Спасибо.

Ответы [ 2 ]

2 голосов
/ 19 февраля 2011

Думаю, проблема в том, что importdata() не различает 1 или несколько пробелов, поэтому предполагается, что строка начинается с первого числа.Данные с разделителями табуляции не имеют этой проблемы.Если вы создаете наборы данных, то, вероятно, лучше отделить данные, используя что-то вроде вкладок или запятых.Вы можете использовать магию форматирования текста, используя textscan().

0 голосов
/ 20 октября 2015

Самый простой способ импортировать это - это сделать это с помощью инструмента импорта в виде файла с фиксированной шириной:

uiimport(filename);

Вы также можете сгенерировать код отсюда (выберите выпадающий список «Импорт» и создайтесценарий или функция).

В качестве альтернативы вы можете прочитать его с помощью textcan:

fid = fopen(filename);
d = textscan(fid, '%3s%3s%s%[^\n\r]', 'Delimiter', '', 'WhiteSpace', '');
fclose(fid);

Затем вы можете сформировать его в числовой массив, если хотите:

d2 = cell2mat(cellfun(@(x) str2double(x), d, 'UniformOutput', false));
...