Не допускайте, чтобы процесс python3 был «убит» из-за недостатка памяти - PullRequest
0 голосов
/ 27 апреля 2020

Я пытаюсь объединить две большие матрицы чисел, первая: features имеет форму np.array в форме 1238,72, другая загружается из файла .json, как видно на втором линия ниже, она имеет форму 1238, 768. Мне нужно загрузить, объединить, переиндексировать, разбить на сгибы и сохранить каждый сгиб в своей папке. Проблема в том, что я получаю Killed на самом первом шаге (считывая содержимое .json в bert)

with open(bert_dir+"/output4layers.json", "r+") as f:
    bert = [json.loads(l)['features'][0]['layers'][0]['values'] for l in f.readlines()]

    bert_post_data = np.concatenate((features,bert), axis=1)
    del bert

    bert_post_data = [bert_post_data[i] for i in index_shuf]
    bert_folds = np.array_split(bert_post_data, num_folds)
    for i in range(num_folds):
        print("saving bert fold ",str(i), bert_folds[i].shape)
        fold_dir = data_dir+"/folds/"+str(i)
        save_p(fold_dir+"/bert", bert_folds[i])

Есть ли способ сделать это более эффективно? Я имею в виду, что должен быть лучший способ ... pandas, json lib?

Спасибо за ваше время и внимание

1 Ответ

1 голос
/ 27 апреля 2020

Попробуйте:

bert = [json.loads(line)['features'][0]['layers'][0]['values'] for line in f]

таким образом, вы, по крайней мере, не читаете весь файл в памяти сразу - при этом, если файл огромен, вы должны дополнительно обработать то, что храните в bert

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...