2015-06-17 4 views
0

Я хочу сохранить mean_2 .... mean_8, std_2 .... std_8 и coVariance как отдельные столбцы в файле. Помоги пожалуйста?Matlab: Запись в файл

Этот код вычисляет IntervalFeatures из сигнала Erp с 256 временными рамками и участками их точек данных являются Хранят в

___________HowTheCodeWorks________________________________________________

каждый 1x4 скольжении подматрица производится столбец для, например: - если A 1x6, вы получите 1-2-3-4, 2-3-4-5, 3-4-5-6 каждый, как столбец , заканчивающийся тремя столбцами. для 1x10 матрицы, вы получите 7 столбцов

вычисления среднего значения каждого столбца

Subtract каждое значение столбца со средним значением соответствующего столбца наконец поэлементным возведением в квадрат, значат, каждый столбец , а затем element-wise sqrt, чтобы получить результат.

A=firstElec; 

%___________Length2_____________________ 
reshaped_2 = im2col(A,[1 2],'sliding'); 
mean_2 = mean(reshaped_2); 
out1 = bsxfun(@minus,reshaped_2,mean_2); 
std_2 = sqrt(mean(out1.^2)) 

%___________Length4_____________________ 
reshaped_4 = im2col(A,[1 4],'sliding'); 
mean_4 = mean(reshaped_4); 
out2 = bsxfun(@minus,reshaped_4,mean_4); 
std_4 = sqrt(mean(out2.^2)) 

%___________Length8_____________________ 
reshaped_8 = im2col(A,[1 8],'sliding'); 
mean_8 = mean(reshaped_8); 
out3 = bsxfun(@minus,reshaped_8,mean_8); 
std_8 = sqrt(mean(out3.^2)) 

%___________CoVariance__________________ 
begInt = 1; 
endInt =256; 
l=endInt - begInt + 1; 
arrayCovar = zeros(1,257); 
j=1; 
for k=1:256 

coVar = 1/l *((A(k)*k) - (mean(A(k:j))*((begInt + endInt)/2))); 
j= 1+k; 
arrayCovar(k)=coVar; 
end 

coVariance = arrayCovar(:,1:256); 
disp(coVariance) 

ответ

1

Если вы хотите, чтобы матрицы отображались в каждом столбце, это будет уродливо. Если я правильно интерпретирую ваш запрос, вы конкатенируете векторы строк, чтобы они отображались как одна строка. Это будет очень плохо.

Что я предлагаю вам сделать, это разделить их так, чтобы каждый вектор строки был разделен на строку. Используйте dlmwrite для этого:

dlmwrite('data.txt', mean_2); 
dlmwrite('data.txt', ' ', '-append'); 
dlmwrite('data.txt', mean_4, '-append'); 
dlmwrite('data.txt', ' ', '-append'); 
dlmwrite('data.txt', mean_8, '-append'); 
dlmwrite('data.txt', ' ', '-append'); 
dlmwrite('data.txt', std_2, '-append'); 
dlmwrite('data.txt', ' ', '-append'); 
dlmwrite('data.txt', std_4, '-append'); 
dlmwrite('data.txt', ' ', '-append'); 
dlmwrite('data.txt', std_8, '-append'); 
dlmwrite('data.txt', ' ', '-append'); 
dlmwrite('data.txt', coVariance, '-append'); 
+0

Но я хочу их как столбцы? –

+0

@ ХаршШарма - Это будет уродливо. Каждая матрица имеет различное количество строк, поэтому мне нужно будет зациклиться и сделать действительно уродливый код. Я предлагаю использовать 'dlmwrite' и разделять каждую матрицу по строкам. См. Мое редактирование. – rayryeng

+0

@HarshSharma - Однако ... если вы действительно набросились на размещение каждой матрицы в отдельных столбцах, мы можем это сделать. – rayryeng

0

Преобразование векторов в одной клетке с помощью функции ниже (использование x = Cellify(mean_2, mean_4, mean_8, ...);), а затем использовать эту замечательную функцию (cell2csv) для записи в файл.

function x = Cellify(varargin) 
    maxSize = [0, 0]; 
    totalSize = [0, 0]; 

    for i = 1:nargin 
     maxSize = max([maxSize; size(varargin{i})]); 
     totalSize = sum([totalSize; size(varargin{i})]); 
    end 

    x = cell(maxSize(1), totalSize(2)); 

    columnShift = 0; 

    for i = 1:nargin 
     x(1:size(varargin{i}, 1), 1+columnShift:size(varargin{i}, 2)+columnShift) = num2cell(varargin{i}); 
     columnShift = size(varargin{i}, 2); 
    end 
end 
Смежные вопросы