Я совершенно новый программист MatLab, так что это может быть легко ..:)
Я пытаюсь сгенерировать скрипт, который сможет считывать любое количество XYZ-файлов в любом порядке в массив и размещать их в массиве в соответствии с координатами X и Y, указанными в файле. ..
Я пытаюсь использовать Load, чтобы получить файлы в массив, а затем прочитать массив и, как было объяснено, использовать координаты X и Y в качестве местоположений в новом массиве.
Я пытался предварительно установить размер массива, а также вычитал значение из X и Y, чтобы минимизировать размер массива (fullArray)
%# Script for extraction of XYZ-data from DSM/DTM xyz files
%# Define folders and filter
DSMfolder='/share/CFDwork/site/OFSites/MABH/DSM/*.xyz';
DTMfolder='/share/CFDwork/site/OFSites/MABH/DTM/*.xyz';
%# Define minimumvalues, to reduce arrays.. Please leave some slack, for the
%# reduction-algorithm..
borderX=100000;
borderY=210000;
%% Expected array-size
expSizeX=20000;
expSizeY=20000;
%# Program starts.. Please do not edit below this line!
files=ls(DSMfolder);
clear fullArray
fullArray=zeros(expSizeX,expSizeY);
minX=999999999;
minY=999999999;
maxX=0;
maxY=0;
disp('Reading DSM files');
[thisFile,remaining]=strtok(files);
while (~isempty(thisFile))
disp(['Reading: ' thisFile]);
clear fromFile;
fromFile=load(thisFile);
for k=1:size(fromFile,1)
tic
fullArray(fromFile(k,1)-borderX,fromFile(k,2)-borderY)=fromFile(k,3);
disp([k size(fromFile,1)]);
if (fromFile(k,1)<minX)
minX=fromFile(k,1);
end
if (fromFile(k,2)<minY)
minY=fromFile(k,2);
end
if (fromFile(k,1)>maxX)
maxX=fromFile(k,1);
end
if (fromFile(k,2)>maxY)
maxY=fromFile(k,2);
end
toc
end
[thisFile,remaining]=strtok(remaining);
end
Как видно, я добавил тик-ток, и время одной операции составило 3.36сек!
Любое предложение о том, почему это так медленно, и как улучшить скорость .. Мне нужно заказать 2x6 000 000 строк, и я не могу удосужиться ждать 466 дней ..: D
С наилучшими пожеланиями
Mark