Зачем нам нужен numpy.fromfile, если у нас уже есть numpy.load? - PullRequest
2 голосов
/ 30 июня 2019

numpy.fromfile

Согласно документации SciPy

Создайте массив из данных в текстовом или двоичном файле.[...] Данные, записанные с использованием метода tofile, могут быть прочитаны с помощью этой функции.

Поэтому я просто следую инструкции и создаю файл с помощью tofile

import numpy as np
A = np.random.rand(1000)
A.tofile('binary_file') # saving a dummy binary_file

x1 = np.fromfile('binary_file') # loading the dummy file

print(np.array_equal(A, x1)) # checking if the arrays are the same
>>> True

numpy.load

В то же время у нас также есть np.save и np.load, которые выполняют именно такую ​​работу как tofile и fromfile

np.save('file.npy',A)
x2 = np.load('file.npy')
print(np.array_equal(A, x1))
>>> True

fromfile == np.load?

Два метода загрузки дают тот же результат, как показано ниже

print(np.array_equal(x1, x2))
>>> True

Тогда зачем нужны обе функции?Что-нибудь, что можно сделать на np.load, но не fromfile?Или наоборот?

Ответы [ 2 ]

3 голосов
/ 30 июня 2019

fromfile == np.load?

Нет. numpy.load читает файлы в формате NPY . Это специальный формат, содержащий метаданные, которые определяют форму и тип данных массива numpy.

numpy.fromfile читает необработанные байты из файла. Метаданные в файле не сохраняются. Ваш пример с A сработал, потому что тип данных по умолчанию, принятый fromfile, равен float64. Вот пример, где это не работает:

In [25]: A = np.array([10, 20, 30, 40])                                                                                                              

In [26]: A.tofile('binary_file')                                                                                                                     

In [27]: B = np.fromfile('binary_file')                                                                                                              

In [28]: B                                                                                                                                           
Out[28]: array([4.9e-323, 9.9e-323, 1.5e-322, 2.0e-322])
1 голос
/ 01 июля 2019

fromfile - это низкоуровневая функция, которая вызывает несколько вызовов в пределах load:

  • np.load (она же np.lib.npio.load) , звонки format.read_array вкл.Строка 452. Глядя на источник для загрузки, вы можете увидеть, как он пытается угадать, как правильно загружать кучу различных типов двоичных файлов.
  • np.lib.format.read_array вызывает fromfile в строке 738. Он загружает из npy формат файла , который представляет собой небольшой заголовок плюс необработанные двоичные данные
  • fromfile - это оболочка Python для PyArray_FromFile, что является странной функцией, которая либо загружает необработанные двоичные данные (полезная версия), либо загружает текстовые данные другим способом.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...