Отображение памяти Python

Я работаю с большими данными, и у меня есть матрицы размером 2000х100000, поэтому, чтобы работать быстрее, я попытался использовать numpy.memmap, чтобы избежать хранения в памяти этих больших матриц из-за ограничений RAM. Проблема в том, что когда я сохраняю одну и ту же матрицу из 2 переменных, то есть One с numpy.load, а другой с np.memmap, содержимое не одно и то же. Это нормально? Я использую тот же тип данных в memmap, что и в моих данных. Пример:

A1 = numpy.load('mydata.npy') A2 = numpy.memmap('mydata.npy',dtype=numpy.float64, mode='r', shape=(2000,2000)) A1[0,0] = 0 A2[0,0] = 1.8758506894003703e-309 

Это содержимое первого элемента массива в обоих случаях. Правильным является значение 0, но я получаю этот странный номер, используя memmap. Спасибо.

One Solution collect form web for “Отображение памяти Python”

Формат NPY – это не просто дамп массива данных в файл. Он включает заголовок, который содержит, помимо прочего, метаданные, которые определяют тип и форму данных массива. Когда вы используете memmap как и вы, карта памяти не учитывает заголовок файла, где хранятся метаданные. Чтобы создать отображаемый в памяти вид файла NPY, вы можете использовать параметр np.load .

Вот пример. Сначала создайте файл NPY:

 In [1]: a = np.array([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]]) In [2]: np.save('a.npy', a) 

Прочтите его с помощью np.load :

 In [3]: a1 = np.load('a.npy') In [4]: a1 Out[4]: array([[ 1., 2., 3.], [ 4., 5., 6.]]) 

Неправильно просмотреть файл с помощью memmap :

 In [5]: a2 = np.memmap('a.npy', dtype=np.float64, mode='r', shape=(2, 3)) In [6]: a2 Out[6]: memmap([[ 1.87585069e-309, 1.17119999e+171, 5.22741680e-037], [ 8.44740097e+252, 2.65141232e+180, 9.92152605e+247]]) 

Создайте memmap с помощью np.load с параметром mmap_mode='r' :

 In [7]: a3 = np.load('a.npy', mmap_mode='r') In [8]: a3 Out[8]: memmap([[ 1., 2., 3.], [ 4., 5., 6.]]) 
  • Эффективное генерирование случайных графов с заданным пользователем глобальным коэффициентом кластеризации
  • Какой самый быстрый способ разрезать матрицу scipy.sparse?
  • Что такое эквивалент Python (numpy или scipy или Pandas) для функции adjboxStats R?
  • структура массивов python numpy
  • ValueError: матрицы не выровнены для ошибки копирования и x
  • Блокировать тридиагональную матрицу python
  • Создание коррелированных данных в Python (3.3)
  • Производительность создания нового DataFrame
  • Python - лучший язык программирования в мире.