Как преобразовать переменные Matlab в .dat (текстовый) файл с заголовками - PullRequest
1 голос
/ 04 июля 2010

РЕДАКЦИОННЫЙ ВОПРОС:

У меня есть 2500 строк x 100 столбцов данных в переменной с именем avg_data_models. У меня также есть 2500 строк x 100 столбцов, переменная «X» и матричная переменная схожего размера «Y», обе из которых содержат координаты. Я хочу сохранить значения этой переменной в текстовом (.dat) файле, который должен иметь 302 строки заголовка следующим образом:

avg_data_models
300
X_1
X_2
.
.
.
X_100
Y_1
Y_2
.
.
.
Y_100
avg_data_models_1
avg_data_models_2
avg_data_models_3
.
.
.
.
.
avg_data_models_100

В указанном выше стиле заголовка первая строка - это имя файла, вторая строка - количество столбцов (каждый столбец имеет 2500 строк), а остальные 300 строк представляют модель каждой переменной соответственно Как 100 моделей X, 100 моделей Y и 100 моделей avg_data_models.

Ответы [ 2 ]

2 голосов
/ 03 сентября 2010

Рассмотрим этот код:

%# here you have your data X/Y/..
%#X = rand(2500,100);

[r c] = size(X);
prefixX = 'X';
prefixY = 'Y';
prefixData = 'avg_data_models';

%# build a cell array that contains all the header lines
num = strtrim( cellstr(num2str((1:c)','_%d')) );   %#' SO fix
headers = [ prefixData ;
            num2str(3*c) ;
            strcat(prefixX,num) ;
            strcat(prefixY,num) ;
            strcat(prefixData,num) ];

%# write to file
fid = fopen('outputFile.dat', 'wt');
fprintf(fid, '%s\n',headers{:});
fclose(fid);

РЕДАКТИРОВАТЬ

Кажется, я неправильно понял вопрос .. Вот код для записи фактических данных (незаголовки заголовков!):

%# here you have your data X/Y/..
avg_data_models = rand(2500,100);
X = rand(2500,100);
Y = rand(2500,100);

%# create file, and write the title and number of columns
fid = fopen('outputFile.dat', 'wt');
fprintf(fid, '%s\n%d\n', 'avg_data_models', 3*size(X,2));
fclose(fid);

%# append rest of data
dlmwrite('outputFile.dat', [X Y avg_data_models], '-append', 'delimiter',',')

Примечание: я использовал запятую , в качестве разделителя, вы можете изменить ее на пробел или табуляцию \t, если хотите ..

1 голос
/ 04 июля 2010

Вы можете использовать fprintf для написания заголовка, например:

%# define the number of data
nModels = 100;
dataName = 'avg_data_models';

%# open the file
fid = fopen('output.dat','w');

%# start writing. First line: title
fprintf(fid,'%s\n',dataName); %# don't forget \n for newline. Use \n\r if yow want to open this in notepad

%# write number of models
fprintf(fid,'%i\n',nModels)

%# loop to write the rest of the header
for iModel = 1:nModels
fprintf(fid,'%s_%i\n',dataName,iModel);
end

%# use your favorite method to write the rest of the data. 
%# for example, you could use fprintf again, using /t to add tabs 
%# create format-string
%# check the help to fprintf to learn about formatting details
formatString = repmat('%f\t',1,100);
formatString = [formatString(1:end-1),'n']; %# replace last tab with newline

%# transpose the array, because fprintf reshapes the array to a vector and 
%# 'fills' the format-strings sequentially until it runs out of data
fprintf(fid,formatString,avg_data'); %'# SO formatting

%# close the file
fclose(fid);
...