Странное поведение файла ndarray.tofile
Я перехожу к Matlab в NumPy / SciPy, и кажется, что np.fromfile и ndarray.tofile corresopnds для fread и fwrite в Matlab соответственно.
Чтобы проверить эти API, я сначала создал двоичный файл, содержащий пять целых чисел {1, 2, 3, 4, 5} в двоичном формате 'int32'.
Затем я прочитал этот файл, используя np.fromfile.
In [365]: in_file = open('12345.bin', 'rb'); x = np.fromfile(in_file, 'int32'); in_file.close()
Я проверил, что он был успешно прочитан, как показано ниже:
In [367]: x Out[366]: array([1, 2, 3, 4, 5], dtype=int32)
Теперь я написал это как файл с другим именем. Мое ожидание заключается в том, что этот выходной файл должен быть точно таким же, как исходный входной файл, который является «12345.bin».
In [368]: out_file = open('12345out.bin', 'wb'); x.tofile(out_file, 'int32'); out_file.close()
Но одна удивительная вещь – размер «12345out.bin» составляет 25 байт, а «12345.bin» – 20 байт. Так что что-то не так. Я открыл «12345out.bin» следующим образом:
In [369]: in_file = open('12345out.bin', 'rb'); x2 = np.fromfile(in_file, 'int32'); in_file.close() In [370]: x2 Out[370]: array([1953392945, 1764897331, 842232942, 1953392947, 1765028403, 842232942], dtype=int32)
Итак, из приведенного выше результата мы видим, что что-то совершенно неверно. Коуд, пожалуйста, помогите мне, что я делаю неправильно?
- Как назвать «MATLAB engine for Python» в Django?
- От Matlab до Python – функция Solve
- Запуск нескольких независимых экземпляров python pyd module
- Эквивалент Python команды MATLAB prod
- Расчет собственных значений Python выполняется намного медленнее, чем вычисления MATLAB на моем компьютере. Зачем?
tofile
не нуждается в параметре type (что является одной из причин, по которым это не отличный инструмент, поскольку он не сохраняет информацию о типе). Поэтому, когда вы делаете
x.tofile(out_file, 'int32')
вы на самом деле говорите, что хотите использовать строку "int32"
в качестве разделителя в текстовом формате:
>>> x = np.arange(1,6,dtype=np.int32) >>> x.tofile(open("tmp.dat", "wb"), "int32") >>> open("tmp.dat","rb").read() b'1int322int323int324int325'
Вместо:
>>> x = np.arange(1,6,dtype=np.int32) >>> x.tofile(open("tmp.dat", "wb")) >>> open("tmp.dat","rb").read() b'\x01\x00\x00\x00\x02\x00\x00\x00\x03\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00' >>> np.fromfile("tmp.dat", "int32") array([1, 2, 3, 4, 5])
(Обратите внимание, что я был слишком ленив, чтобы использовать блок с открытием и закрытием файлов, как я должен.)
- Python – не получается правильно datetime при чтении времени из файла excel
- Вставьте элемент до и после определенного элемента в списке строк
- экспортировать переменную matlab в текст для использования python
- Путаница в работе массива в numpy
- заменив Matlab на python
- Существует ли эквивалент Python для MATLAB?
- Каков эквивалент imagesc в OpenCV
- matlab convolution "same" to numpy.convolve
- Использование ARPACK для решения проблемы собственных значений, но получение несогласованных результатов с Matlab
- Карикатурные сюжеты в стиле MATLAB или Python?
- встраивать python в файл melab в matlab на os x