numpy.fromfile
의 단일 호출을 사용하여 읽으려는 이진 파일에 여러 블록이 있습니다. 여기numpy.fromfile을 사용하여 분산 된 이진 데이터 읽기
OES=[
('EKEY','i4',1),
('FD1','f4',1),
('EX1','f4',1),
('EY1','f4',1),
('EXY1','f4',1),
('EA1','f4',1),
('EMJRP1','f4',1),
('EMNRP1','f4',1),
('EMAX1','f4',1),
('FD2','f4',1),
('EX2','f4',1),
('EY2','f4',1),
('EXY2','f4',1),
('EA2','f4',1),
('EMJRP2','f4',1),
('EMNRP2','f4',1),
('EMAX2','f4',1)]
을 바이너리의 형식 : 각 블록의 형식은 다음과
Data I want (OES format repeating n times)
------------------------
Useless Data
------------------------
Data I want (OES format repeating m times)
------------------------
etc..
내가 원하는 데이터와 쓸모없는 데이터 사이의 바이트 증가를 알고있다. 또한 각 데이터 블록의 크기를 알고 있습니다.
지금까지 내가 전화 한 다음 파일 객체 f
에 노력하여 내 목표를 달성했다 :
nparr = np.fromfile(f,dtype=OES,count=size)
그래서 내가 원하는 각 데이터 블록에 대해 다른
nparr
을 가지고 하나에 모든
numpy
배열을 연결된 새로운 배열.
내 목표는 연결하지 않고 원하는 (메모리 용도로) 모든 블록이있는 단일 배열을 갖는 것입니다. 즉, nparr = np.fromfile(f,dtype=OES)
번만 전화하고 싶습니다. 이 목표를 달성 할 수있는 방법이 있습니까?
대단히 감사합니다! 나는 이것도 고려하고 있었다. 메모리가 어떻게 관리되고 있는지 나는 조금 퍼지다. 이것은 np.fromfile과 nparr에서 중복 된 메모리를 생성하지 않습니다? nparr 하위 집합이 np.fromfile을 볼 수 있습니까? 아니면 복사본? 내 테스트를 토대로, 그것과 같은 항목 할당이 복사본을 만드는 것처럼 보입니다. 하지만 나는 틀렸어. 멋진 제안에 감사드립니다. – snowleopard
각 블록에 대해'fromfile (f, count = n, dtype = OES)'는 길이가'n' 인 배열을 생성합니다. 그런 다음 해당 배열은'nparr'의 적절한 범위에 복사됩니다. 'fromfile'에 의해 생성 된 배열은 다른 곳에서는 할당되지 않으므로 파이썬에서 메모리를 재사용 할 수 있습니다. –
당신은 사용할 수 없다는 것을 의미합니까? 파이썬의 가비지 컬렉터에 대한 필자의 글을 기반으로, 당신이 의미하는 바를 완벽하게 이해할 수있을 것입니다. – snowleopard