Вам не нужно. loadmat
не сохраняет файл открытым. Если задано имя файла, он загружает содержимое файла в память, а затем немедленно закрывает его. Вы можете использовать файл-объект, такой как @ nils-werner, но вы не получите никакой пользы от этого. Вы можете видеть это, глядя на source code.
Скорее всего, вы исчерпаете память из-за простого количества данных за раз. Первое, что я хотел бы попробовать, - загрузить все данные в один большой массив numpy. Вы знаете размер каждого файла, и знаете, сколько у него файлов, поэтому вы можете предварительно выделить массив нужного размера и записать данные на срезы этого массива. Это также сразу скажет вам, если это проблема с размером вашего массива.
Если у вас все еще не хватает памяти, вам понадобится другое решение. Простым решением было бы использовать dask
. Это позволяет создавать что-то, что выглядит и действует как массив numpy, но живет в файле, а не в памяти. Это позволяет работать с слишком большими наборами данных, чтобы вписаться в память. bcolz
и blaze
предлагают аналогичные возможности, хотя и не так легко.
Если это не вариант, h5py
и pytables
позволяют вам хранить наборы данных в файлах поэтапно, а не хранить все это в памяти сразу.
В целом, я думаю, что этот вопрос является классическим примером XY Problem. Как правило, гораздо лучше указывать свои симптомы и просить о помощи по этим симптомам, а не гадать, что такое решение, и просить кого-то помочь вам реализовать решение.
не работает, то же сообщение "Killed" около 13k – ytrewq
Сколько данных вы читаете? Возможно, это проблема с исчерпанием памяти + смены. Вы проверили 'top'? Вы также можете использовать 'lsof' для проверки файлов, которые в данный момент открыт. Вы должны видеть только несколько файлов. –
каждый мат ['data'] - массив 10x4096 of float32 – ytrewq