векторизация кода в Matlab - PullRequest
       23

векторизация кода в Matlab

1 голос
/ 22 февраля 2012

У меня есть файл ASCII, содержащий ряд поверхностей, созданных в программном обеспечении для интерпретации сейсмических данных. Это семейство интерполированных поверхностей между верхней и нижней поверхностями. Это семейство. Все поверхности отбираются в каждой точке регулярной квадратной сетки. Структура файла: X Y Z1 Z2 ..... Zn Где X, Y - координатные векторы, общие для всех поверхностей, Z1, Z2, ..., Zn - поверхности. Я хотел бы импортировать файл в Matlab и сохранить каждую отдельную поверхность в свой собственный файл XYZ.

Предполагая, что данные импортируются и хранятся в переменной «data», этот код выполняет работу:

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. Я думаю, что сделать это для команды сохранения может быть невозможно, но, возможно, другие 2 строки могут. У меня такое чувство, что я должен использовать массивы клеток или, возможно, структуры, но я не могу придумать правильный синтаксис. Есть идеи? Спасибо

1 Ответ

2 голосов
/ 22 февраля 2012

Вот что вы можете сделать:

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) );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...