2014-05-07 79 views
1

我有數據這樣的數據文件:寫入cellfun輸出設定

0 -7.09381e-10 7.88112e-09 
1 -3.365e-09 3.96397e-08 
2 -1.74014e-09 1.3715e-08 
3 -6.79327e-10 4.74787e-09 
4 -1.92799e-10 1.56609e-09 
5 6.53422e-11 5.09169e-10 
6 5.21863e-11 1.73983e-10 
7 5.64361e-11 6.29614e-11 
0 -9.44027e-10 8.14559e-09 
1 -2.02866e-09 4.29019e-08 
2 -2.2109e-10 1.57419e-08 
3 4.55366e-11 5.97503e-09 
4 1.70868e-10 2.28134e-09 
5 1.90134e-10 8.52557e-10 
6 4.4223e-11 3.2142e-10 
7 7.2096e-12 1.22047e-10 

和另一個100的數據集在這個序列中一個接一個。第一列索引是時間索引。餘倍的數據,然後使用以下MATLAB代碼計算列2和3的比例:

data_jknife =dlmread('datafile.txt',' '); 
metadata = data_jknife(:,1); % a bidimensional array data_jknife, and want to access all its elements on the first column 
data1 = data_jknife(:,2);%accessing all the elements on the second clomun 
data2 = data_jknife(:,3); 
groupedMetaData = arrayfun(@(x) metadata(x:4:end), 1:4 ,'UniformOutput',false); 

groupedData1 = arrayfun(@(x) data1(x:4:end), 1:4 ,'UniformOutput',false); %grouping data from the second column 
groupedData2 = arrayfun(@(x) data2(x:4:end), 1:4 ,'UniformOutput',false); 

flippedData1 = fliplr(groupedData1); 
flippedData1 = flippedData1(1:2); 
foldedData1 = cellfun(@(x,y) mean([x y],2), flippedData1 ,groupedData1(1:numel(flippedData1)),'UniformOutput',false); 
flippedData2 = fliplr(groupedData2); 
flippedData2 = flippedData2(1:4); 
foldedData2 = cellfun(@(x,y) mean([x y],2), flippedData2 ,groupedData2(1:numel(flippedData2)),'UniformOutput',false); 

foldedData = cellfun(@rdivide, foldedData1, foldedData2,'UniformOutput',false); 

所以foldedData的輸出應該是這樣的:

0 R(0) 
1 R(1) 
0 R'(0) 
1 R'(1) 
2 R'(2) 

,其中R是第二柱除以相應時間片的摺疊數據的第3列。現在我想以上述格式將輸出寫入文件中。但我不知道該怎麼做。有人可以幫我嗎?提前致謝。所以這裏是操作 好的數值。這樣的摺疊動作這樣的數據組的第一序列: 第二列元素(I採取噸的平均= 0,3,4,7的數據)

((-7.09381*10^-10) + (-6.79327*10^-10) + (-1.92799*10^-10) + 
(5.64361*10^-11))/4 = 


-3.81268*10^-10 

第三列元素:

((7.88112*10^-09) + (4.74787*10^-09) + (1.56609*10^-09) + (6.29614*10^-11))/4 = 
3.56451*10^-9 

然後我取t = 1,2,5,7數據的平均值。因此,第二列是:

((-3.365*10^-09) + (-1.74014*10^-09) + (6.53422*10^-11) + (5.64361*10^-11))/4= 
-1.24584*10^-9 

第三列是:

((3.96397*10^-08) + (1.3715*10^-08) + (5.09169*10^-10) + (1.73983*10^-10))/4= 
1.35095*10^-8 

所以用於數據的第一序列的輸出爲:

R0 = (-3.81267725`*^-10)/(3.5645103500000007`*^-9) = -0.106962 
R1 = (-1.245840425`*^-9)/(1.35095*10^-8) = -0.0922198 

因此,對於第一序列中的期望的輸出是:

0 -0.106962 
1 -0.0922198 

回答

0

代碼

%%// input_filepath and output_filepath are the paths to the input and 
%%// output files 

d1 = dlmread(input_filepath,' ') 

t1 = permute(reshape(d1',24,[]),[1 3 2]) %%//' 
d1 = permute(reshape(t1,3,8,[]),[2 1 3]) 

d2 = d1([0 3 4 7]+1,[2 3],:) 
d22 = d1([1 2 5 7]+1,[2 3],:) 

t1 = [mean(d2) ; mean(d22)] 
t2 = t1(:,1,:)./t1(:,2,:) 

out = [repmat([0:size(t1,1)-1]',size(t2,3),1) t2(:)] %%//' 
datacell = cellstr(num2str(out)) 

fid1 = fopen(output_filepath,'w'); 
for k = 1:size(datacell,1) 
    fprintf(fid1,'%s\n',datacell{k,:}); 
end 
fclose(fid1); 
+0

嗨Divakar,這不是很適合我。而且我也編輯了部分代碼。如果我繪製他們的圖形看起來是正確的。當我摺疊並取平均數據兩次,所以輸出實際上是這樣的:0 R(0) 1 R(1) 0 R'(0) 1 R'(1) 2 R' 2)因爲首先有8個時間片,我折兩次。 – user3389597

+0

因此,對於給定的值,您是否可以發佈實際值,而不是'foldedData'的'R(0)','R(1)'等?請編輯這些問題? – Divakar

+0

嗨Divakar,由於輸出太長,我在文章結尾添加了它。請看一看。謝謝。 – user3389597