문제

Matlab에 대한 나의 지식은 단지 알아야 할 필요성에 관한 것이므로 이것은 아마도 기본 질문 일 것입니다. 그럼에도 불구하고 여기에 온다 :

이진 형식으로 저장된 데이터 (16 비트 정수)가 포함 된 파일이 있습니다. Matlab의 벡터 /배열로 어떻게 읽습니까? 이 데이터를 MATLAB의 파일에 어떻게 작성합니까? 엄청난 양의 데이터 (기가 바이트)를 읽고/쓸 때 성능 속도를 높이기위한 스마트 조정이 있습니까?

도움이 되었습니까?

해결책

처럼 도마뱀을 청구하십시오 Fread를 사용하여 데이터를 벡터에로드 할 수 있습니다. 나는 단지 그의 대답으로 조금 확장하고 싶다.

읽기 데이터

>> fid=fopen('data.bin','rb') % opens the file for reading
>> A = fread(fid, count, 'int16') % reads _count_ elements and stores them in A.

명령 포펜 그리고 프레드 Little-Endian의 기본값 [1] 정수에 대한 인코딩. 파일이 빅 엔디안 인코딩 된 경우 변경해야합니다. 프레드 에게

>> A = fread(fid, count, 'int16', 'ieee-be');

또한 전체 파일 세트를 읽으려면

>> count=inf;

그리고 데이터를 매트릭스로 읽으려면 N 열이 사용됩니다

>> count=[n inf];

쓰기 데이터

파일에 데이터를 재치하는 것. 명령, fwrite, 안에 답변은 이진 파일에 씁니다. 데이터를 텍스트 파일에 쓰려면 사용할 수 있습니다. dlmwrite

>> dlmwrite('data.csv',A,',');

참조

[1] http://en.wikipedia.org/wiki/endianness

업데이트

  1. 기계 형식 (즉, ieee-be, IEEE-LE, vaxd 이진 데이터의 기타.포펜 아니면 그 프레드 Matlab의 명령. 지원되는 기계 형식의 세부 사항은 Matlab의 문서에서 찾을 수 있습니다. 포펜.

  2. Scott French 's 댓글 빌의 대답데이터를 int16 변수로 읽는 것을 제안합니다. 이 사용을 수행합니다

    >> A = int16(fread(fid,count,precision,machineFormat));
    

    어디 세다 읽을 데이터의 크기/모양이며 정도 데이터 형식입니다 machineformat각 바이트의 인코딩입니다.

  3. 명령을 참조하십시오 FSEEK 파일 주위를 이동합니다. 예를 들어,

    >> fseek(fid,0,'bof');
    

    파일을 시작 위치로 되돌립니다 BOF 의지합니다 파일의 시작.

다른 팁

파일에 저장된 값 수를 알고 있다고 가정하면 데이터를 배열로 읽기 위해 이와 같은 작업을 수행 할 수 있습니다.

fid = fopen('data.bin','rb')
A = fread(fid, count, 'int16')

파일에 데이터를 작성하려면 다음을 수행합니다.

fid = fopen('data.bin','w')
count = fwrite(fid, A, 'int16')

fwrite 함수는 수를 반환합니다 집단 파일에 작성된 (바이트 아님).

성능 튜닝이 진행되는 한, 청크의 데이터를 읽고 처리하는 데 필요한만큼만 사용 할 수 있습니다. 이것은 모든 언어에서 동일하며 Matlab과 관련된 속도를 높일 수있는 방법이 없습니다.

나는 보통 응답에서 링크를 보는 것을 싫어하지만 이것은 매우 가깝게 보입니다.

http://www.mathworks.com/support/tech-notes/1400/1403.html

성능 튜닝의 두 번째 부분에 관해서는 Matlab을 사용한 지 6 년이 지났으므로 모르겠습니다.

HTH

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top