Невозможно обработать огромный файл траектории для MD - PullRequest
0 голосов
/ 25 февраля 2020

Для симуляции 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...