각 행이 이미지의 평평한 버전 인 곳에서 numpy 배열로 hdf 파일 컬렉션을 빠르게 설정하는 방법을 찾고 있습니다. 정확히 의미하는 것 :hdf에서 numpy로 ndarray로 - 빠른 방법
내 hdf 파일은 다른 정보 옆에 프레임 당 이미지를 저장합니다. 각 파일에는 512x424 이미지가있는 51 개의 프레임이 있습니다. 이제 300+ hdf 파일이 있고 모든 이미지의 모든 프레임이 하나의 numpy ndarray에 저장되는 프레임 당 하나의 단일 벡터로 이미지 픽셀을 저장하고 싶습니다. 내가 지금까지 가지고 무엇
가 매우 느린 방법이며, 사실은 내가 더 빨리 만들 수있는 방법 아무 생각이 : 다음 그림을 이해하는 데 도움이됩니다. 문제는 내가 생각하기에 최종 배열이 너무 자주 호출된다는 것입니다. 첫 번째 파일은 배열에 매우 빠르게로드되지만 속도는 빠르게 감소합니다.
내 현재 코드 (현재 HDF 파일의 수를 인쇄하여 관찰) : 자세한 내용은
os.chdir(os.getcwd()+"\\datasets")
# predefine first row to use vstack later
numpy_data = np.ndarray((1,217088))
# search for all .hdf files
for idx, file in enumerate(glob.glob("*.hdf5")):
f = h5py.File(file, 'r')
# load all img data to imgs (=ndarray, but not flattened)
imgs = f['img']['data'][:]
# iterate over all frames (50)
for frame in range(0, imgs.shape[0]):
print("processing {}/{} (file/frame)".format(idx+1,frame+1))
data = np.array(imgs[frame].flatten())
numpy_data = np.vstack((numpy_data, data))
# delete first row after another is one is stored
if idx == 0 and frame == 0:
numpy_data = np.delete(numpy_data, 0,0)
f.close()
, 나는 의사 결정 트리 학습이 필요합니다. 내 hdf 파일이 내 RAM보다 크기 때문에 메모리를 절약 할 수있는 배열로 변환하여 더 적합하다고 생각합니다.
모든 입력에 감사드립니다. 나는 생각하지 않는다
알고리즘에 한 번에 두 개 이상의 프레임이 필요합니까? 나는 속도 저하가 vstack에 대한 모든 호출에서 비롯된 것이라는 것을 추측하고 있습니다. 그런 식으로는 아무 것도 할 필요가 없을 것입니다. – Elliot
또한 if if idx == 0 및 frame == 0 :'조건으로 어떤 일이 일어나고 있는지 잘 모르겠습니다. 난 당신이 그것에서 0x217088 요소 배열을 받고 있다고 생각합니다. – Elliot
불행히도 모든 기능 공간을 사용하는 임의의 forrests를 사용하려고합니다. 어쩌면 scikit 배울 수있는 방법에 대한 또 다른 옵션이 있지만, 나는 그런 인식하지 못합니다. – muleque