Для симуляции MD мне нужно прочитать большой файл координат, случайно выбрать несколько из них и сохранить их.
import pickle
import numpy as np
import itertools
import pandas as pd
df = open('/Users/apple/Downloads/traj-3frames.crd','r').readlines()[1:]
df = list(map(lambda x : x.strip().split(' '),df))
image_ends = [i for i,x in enumerate(df) if len(x) < 4]
no_images = 2
images_selected_indices = np.random.choice(len(image_ends),no_images,True)
for index,image in enumerate(images_selected_indices):
image_index = image_ends[image]
if image == 0:
selected_image = df[0:image_index]
else:
previous_image_index = image_ends[image-1]
selected_image = df[previous_image_index + 1:image_index]
flattened_coordinates = list(itertools.chain.from_iterable(selected_image))
total_rows = int(len(flattened_coordinates)/3)
coordinates_df = [flattened_coordinates[i*3:(i+1)*3] for i in range(total_rows)]
coordinates_df = pd.DataFrame(coordinates_df,columns = ['x','y','z'])
pickle.dump(coordinates_df,open('image_' + str(index) + '.pkl','wb'))
Мой входной файл имеет размер 6,7 ГБ и даже компьютеры с 16 ГБ ОЗУ не удается обработать его, предложите лучшие способы управления памятью.
Входной файл
58.783 3.416 63.966 59.191 2.573 63.767 59.211 3.704 64.773 5.431
16.078 1.087 6.188 16.647 1.226 4.706 16.534 1.514 2.794 15.157
13.977 2.273 14.423 14.305 2.369 15.933 14.342 10.048 12.837 4.644
10.828 13.338 4.404 9.627 13.361 5.325
66.377 65.275 64.865
32.355 31.829 32.630 33.434 32.598 31.898 32.073 30.808 32.343 32.476
31.750 33.717 30.835 32.893 32.578 34.323 33.549 32.603 34.745 32.201
32.260 33.192 32.780 30.852 34.067 33.743 33.644 34.571 34.408 31.982