Numpy memmap первые строки случайные - PullRequest
0 голосов
/ 11 ноября 2019

Я тестирую np.memmap, так как мне нужно использовать его для большого файла данных. Я использую Python 3.7 на компьютере с Windows. Мой тестовый пример очень прост.

import numpy as np
arr = np.ones((10**4, 10), dtype=np.float32)
np.save("./arr_test.npy", arr)
data = np.memmap("./arr_test.npy", dtype=np.float32, shape=arr.shape) 
print((data!=1).sum(), data[:30])

Вывод показывает, что первые 32 не равны единице.

(32, memmap([[2.2366853e+08, 1.2387478e-40, 3.4833497e-15, 4.4898648e+21,
          1.5767864e-19, 2.1442303e-07, 2.2228396e-15, 7.6830766e+31,
          1.7177136e+19, 6.7425655e+22],
         [1.5767864e-19, 1.8727951e+31, 2.2228527e-15, 2.7904159e+29,
          1.5767847e-19, 6.4098282e-10, 1.4584911e-19, 2.4043096e-12,
          1.3593928e-19, 1.3563156e-19],
         [1.3563156e-19, 1.3563156e-19, 1.3563156e-19, 1.3563156e-19,
          1.3563156e-19, 1.3563156e-19, 1.3563156e-19, 1.3563156e-19,
          1.3563156e-19, 1.3563156e-19],
         [1.3563156e-19, 7.7097618e-33, 1.0000000e+00, 1.0000000e+00,
          1.0000000e+00, 1.0000000e+00, 1.0000000e+00, 1.0000000e+00,
          1.0000000e+00, 1.0000000e+00],
         [1.0000000e+00, 1.0000000e+00, 1.0000000e+00, 1.0000000e+00,
          1.0000000e+00, 1.0000000e+00, 1.0000000e+00, 1.0000000e+00,
          1.0000000e+00, 1.0000000e+00],

Что я пропустил?

1 Ответ

1 голос
/ 11 ноября 2019

memmap работает с необработанными данными без дополнительной информации, но файлы в формате NPY имеют заголовок с информацией о типе данных, измерениях и т. Д.

Ненулевые числа - это данные заголовка, интерпретируемые как числа с плавающей запятой.

Функция numpy.lib.format.open_memmap предназначена для того, чтобы запоминать существующие NPY-файлы или сначала создавать новые.

...