2014-12-21 2 views
0

약 400KB의 데이터 파일을 약 4000 개 읽어야합니다. 데이터는 나중에 분석되어 파일을 데이터 구조에 기록합니다. 가져 오기 작업은 약 4 분이 걸리고 나는 importdatadlmread도 시도했지만 그다지 차이는 없습니다.matlab에 여러 개의 큰 파일을 가져 오는 빠른 방법

루프, 가져 오기 기능 또는 Matlab이 여러 개의 대용량 파일을 가져 오는 속도가 느린 경우 알려주십시오. catch/try이 파일 중 일부는 제대로 읽을 수 없기 때문에 사용되지만 스크립트가 느려지지는 않습니다.

다음은 스크립트의 :

for k=40020:10:75000 
try 
    name=['tmp' sprintf('%d',k)]; 
    c=c+1; 
    m(k).count=k; 
    m(k).col=load(name); 
    [val in]=find(m(k).col(:,5)~=1); 
    m(k).id=m(k).col(val,1); 
    m(k).posx=m(k).col(val,2); 
    m(k).posy=m(k).col(val,3); 
    m(k).posz=m(k).col(val,4); 
catch 
    disp(['Error']) 
end 
end 
+0

어떤 파일이 있습니까? 숫자가있는 텍스트 파일? 'M '을 미리 배정 하시겠습니까? – Daniel

+1

실행을 느리게하는 행을 확인하려면 MATLAB Profiler를 사용하여 명령을 실행해야합니다. 만약 실제로 느려지는 파일을 읽는다면 (나는 그것이 의심 스럽다),'load' 명령을 가진 라인이 병목 현상으로 나타나야한다. – MrAzzaman

+1

루프 변수'k'는 순차적이지 않습니다 (점프가 10입니다). 그래서'm' 배열은 실제로 매우 희소합니다. – Shai

답변

1

몇 가지 참고 :

400 킬로바이트가 큰 파일이 아닙니다.

4 분 안에 4000 개의 파일은 각각 0.06 초입니다.

변수 c를 사용하지 않는 것 같습니다.

매트릭스 인덱스는 40020에서 시작하고 데이터를 포함하는 다음 구조 인덱스는 +10 등입니다. 이것은 매우 드문 드문 드문 드문 드물어서 메모리 낭비와 시간 낭비입니다.

당신은 dlmread를 사용하고 데이터를 가져 오기 ->하지만 당신은로드를 사용하는 코드에서 말합니다. 파일이 ascii입니까?

시간을 확인하는 가장 좋은 방법은 프로파일 러를 사용하는 것입니다.

profile on 
    % run your code 
    profile viewer 

파일이 로컬 또는 네트워크에 있습니까? 네트워크 성능에서 파일을 읽는 것은 훨씬 느려질 수 있습니다.

+0

나는 프로필을 만들었습니다. 예로드가 느려졌습니다.로드, importdata 및 dlmread 사이의 속도에는 별다른 차이가 없습니다. 나는 그것이 미리 도움이되는지를 미리 할당하고 볼 것입니다. 고마워요. – Sherbika

+0

은 다음을 사용하여 사전 할당을 시도했습니다. m = struct ('count', [], 'col', [], 'id', [], 'posx', [], 'posy', [], 'posz') 도움이되지 않았다! ..250s – Sherbika

+0

하나의 파일을로드하는 데 시간이 얼마나 걸립니까? 0.06 초와 비교할 만합니까? 파일의 형식은 무엇입니까? – matlabgui

관련 문제