2013-06-12 3 views
4

일반적인 프로그래밍 질문이지만 Matlab에 대한 특정 고려 사항이있을 수 있습니다.큰 행렬 가져 오기 : 전체 또는 열 가져 오기? - MATLAB

매우 큰 데이터 파일을 가져오고 있습니다. 전체 파일을 메모리로 가져온 다음 부분 행렬로 나누거나 모든 n 열을 새 행렬로 가져 오는 것이 더 나은 방법인가/빠름/더 효율적입니까?

제 생각 엔 캐시에 모든 것을로드하고 처리하는 것이 더 빠를 것이라고 추측합니다.하지만 그것은 단순한 무식한 추측입니다.

+0

데이터 파일의 형식은 무엇입니까? 텍스트 파일, ASCII로 구분 된 숫자 파일, CSV 파일입니까? 파일 스트림을 열고 파일 스트림을 읽고 마지막으로 파일 스트림을 닫는다는 점에서 C와 비슷한 구문을 사용하는 MATLAB에 내장 된 여러 데이터 유형에 대한 특수 처리기가 있습니다. 나는 이것들 중 하나가 최선의 방법이 될 것이라고 생각합니다. – Engineero

+0

행렬을 사용하여 수행 할 작업을 지정할 수 있습니까? 목표가 행렬을 메모리에로드하고 나중에 계산을하지 않으면 캐시를 사용할 이유가 없습니다. –

+0

안녕하세요, Engineero에 대한 의견을 보내 주셔서 감사합니다. 현재 데이터가 CSV라는 가정하에 코드를 작성하고 있습니다. 내가하고있는 일은'data = csvread ('filename')'을하고 데이터 행렬을 여러 개의 행렬로 나누는 것이다. 'matrix_1_2 = data (:, 1 : 2)'등. 첫 번째 두 열만 검색하고, 저장 한 다음 두 번째 열 쌍을 검색하는 것보다 낫지 않습니까? – msmf14

답변

1

내 경험에 비추어 볼 때 가장 좋은 방법은 csvread (textscan을 사용하는 dlmread를 사용하므로 시간상의 벌칙이 중요하지 않음)를 사용하여 한 번 구문 분석하는 것입니다. 물론 이것은 매우 큰 파일이 사용 가능한 여유 RAM 용량보다 크지 않다는 것을 의미합니다. 매우 큰 파일이 RAM보다 큽니다 (예를 들어 31GB 파일을 구문 분석하면 됨). fopen을 사용하는 것보다 한 줄씩 (또는 청크, 원하는 블록) 읽고 쓰기 가능한 매트 파일을 작성하십시오. 이 방법을 사용하면 이론적으로 파일 시스템에 의해 제한된 거대한 파일을 작성할 수 있습니다.