Python: Могу ли я записать в файл без загрузки его содержимого в оперативную память? - PullRequest
0 голосов
/ 09 июля 2019

Получил большой набор данных, который я хочу перемешать.Весь набор не помещается в ОЗУ, поэтому было бы хорошо, если бы я мог открывать несколько файлов (например, hdf5, numpy) одновременно, циклически перебирать свои данные и случайным образом назначать каждую точку данных одной из куч (а затем перетасовывать каждуюворс).

Я действительно неопытен в работе с данными в python, поэтому я не уверен, возможно ли записывать в файлы, не сохраняя остальное их содержимое в оперативной памяти (я использовал np.save и savez с небольшим успехом).

Возможно ли это и в h5py или в numpy и, если да, то как я могу это сделать?

1 Ответ

1 голос
/ 09 июля 2019

Memmory сопоставленные файлы позволят вам то, что вы хотите.Они создают пустой массив, который оставляет данные на диске, загружая данные только по мере необходимости.Полная страница руководства: здесь .Однако самый простой способ их использования - передать аргумент mmap_mode=r+ или mmap_mode=w+ в вызове np.load, оставив файл на диске (см. здесь ).

Iрекомендую использовать расширенную индексацию.Если у вас есть данные в одномерном массиве arr, вы можете проиндексировать их, используя список.Так что arr[ [0,3,5]] даст вам 0-й, 3-й и 5-й элементы arr.Это сделает выбор перемешанных версий намного проще.Так как это приведет к перезаписи данных, вам нужно будет открывать файлы на диске только для чтения и создавать копии (используя mmap_mode=w+) для помещения перемешанных данных.

...