2012-02-21 76 views
1

我有一個ASCII文件,其中包含許多在地震解釋軟件中創建的曲面。它們是頂部表面和底部表面之間的一系列插值曲面。族是所有曲面都在常規的網格中的每個點進行採樣。 文件結構爲: X Y Z1 Z2 ..... Zn 其中X,Y是所有表面共有的座標向量,Z1,Z2,...,Zn是表面。 我想在Matlab中導入文件並將每個單獨的曲面保存到它自己的文件XYZ中。在Matlab中矢量化代碼

假設數據導入並存儲在變量「數據」,這個代碼的工作:

r=size(data,1); 
c=size(data,2)-2; 
temp(:,1)=data(:,1); 
temp(:,2)=data(:,2); 
for i = 1:c 
    temp(:,3)=data(:,i+2); 
    tempname = ['proportional_',num2str(i*5-5),'ms','.txt']; % naming reflects the 
                  % fact that surfaces 
                  % are in two way travel 
                  % time and that median 
                  % distance between each 
                  % two surfaces is ~ 5 
                  % milliseconds 
    save (tempname,'temp','-ASCII','-TABS'); 
end                                         
clear r c temp tempname i 
clc 

我想通過採取儘可能多的它可能出來的for循環向量化的代碼。我認爲這樣做的保存命令可能是不可能的,但也許其他兩條線可以。我的感覺是我應該使用單元陣列或者結構,但我想不出正確的語法。 任何想法?謝謝

+0

如果你有一個ND數組,'data'的格式:'XY Z1 Z2 ...'做它的零墊'X'和'Z''將始終有'numel(X)* numel(Y)'值? – macduff 2012-02-21 21:07:57

+0

我不確定我是否理解這個問題。數據是一個二維數組,其中每個X,Y,Z1,...,Zn是一列 – MyCarta 2012-02-21 23:29:15

回答

2

這裏是你可以做什麼:

temp = arrayfun(@(x) data(:,[1 2 x]), 3:size(data,2), 'UniformOutput',0); 
arrayfun(@(x) dlmwrite(strcat('proportional_',num2str(x*5-5),'ms.txt'), ... 
     temp{x}, '\t'), 1:numel(temp)); 
+0

我會盡早嘗試這個(並試圖理解它)。會回來。謝謝! – MyCarta 2012-02-21 23:31:09

+0

Yowza。 +1 ...好... ...一些東西。 – Pursuit 2012-02-22 04:19:16