2017-11-28 94 views
2

나는 에 액세스해야하는 matlab 파일 데이터 파일의 큰 세트를 가지고 있습니다. -v6 또는 -v7 옵션을 사용하여 save을 사용하여 파일을 저장했지만 -v7.3은 저장하지 않았습니다.matlab (.mat) 파일의 부분로드 - 파이썬에서의 -v7

각 파일에서 단 하나의 숫자 값만 읽으면 파일이 많으며 (100k +) 비교적 큽니다 (1MB +). 따라서 쓸모없는 I/O 작업에서 99 %의 시간을 들여 보내고 있습니다.

부분 부하와 같은 것을 찾고 있는데, 이는 HDF5 라이브러리를 사용하는 -v7.3 파일에 적합합니다.

지금까지 나는 scipy.io.loadmat API를 사용했습니다.

v4 (Level 1.0), v6 and v7 to 7.2 matfiles are supported. 
You will need an HDF5 python library to read matlab 7.3 format mat files. 
Because scipy does not supply one, we do not implement the HDF5/7.3 interface here. 

https://docs.scipy.org/doc/scipy/reference/generated/scipy.io.loadmat.html

을하지만이 부분 부하를 허용하지 않는 것 같습니다 :

문서는 말한다.

누구나 이러한 기능을 구현 한 경험이 있거나 하위 수준에서 이러한 .mat 파일을 구문 분석하는 방법을 아는 사람이 있습니까? 다음과 같이

d = loadmat(filename, variable_names=['variable_name']) 

액세스 :

나는 구조가
+0

단일 변수를 읽고 싶습니까? – MaxU

+0

예, 이미 상당한 시간을 절약 할 수 있습니다. 이상적으로, 나는 배열 중 하나의 첫 번째 값을 읽어야 할 것입니다. – ErroriSalvo

답변

3

를 사용하여 단일 변수를 읽으려면 variable_names 매개 변수

알려진 때 fseek -like 접근이 가능할 수있을 것 같아요
d['variable_name'] 

업데이트 : 배열/행렬의 첫 번째 요소 만 필요하면 y 여전히 메모리에 모든 변수를 읽을 수 있지만, 첫 번째 요소는 val에 할당 된 후에는 삭제됩니다 :

val = loadmat(filename, variable_names=['var_name']).get('var_name')[0, 0] 

참고 : OU는이 작업을 수행 할 수 있습니다.

+0

변수의 일부를로드하는 방법은 무엇입니까? – ErroriSalvo

+0

@ErroriSalvo, 그런 가능성을 알지 못합니다 ... – MaxU