Каким образом данные хранятся в * .npy?

Я сохраняю массивы NumPy, используя функцию numpy.save. Я хочу, чтобы другие разработчики имели возможность читать данные из этих файлов с использованием языка C. Так что мне нужно знать, как numpy упорядочивает двоичные данные в файле.OK, это очевидно, когда я сохраняю массив «i4», но как насчет массива массивов, который содержит некоторые структуры? Невозможно найти какую-либо информацию в документации

UPD: позволяет сказать, что данные – это что-то вроде:

dt = np.dtype([('outer','(3,)<i4'),('outer2',[('inner','(10,)<i4'),('inner2','f8')])]) 

UPD2: как насчет сохранения «динамических» данных (dtype – object)

 import numpy as np a = [0,0,0] b = [0,0] c = [a,b] dtype = np.dtype([('Name', '|S2'), ('objValue', object)]) data = np.zeros(3, dtype) data[0]['objValue'] = a data[1]['objValue'] = b data[2]['objValue'] = c data[0]['Name'] = 'a' data[1]['Name'] = 'b' data[2]['Name'] = 'c' np.save(r'D:\in.npy', data) 

Действительно ли, чтобы читать эту вещь с C?

2 Solutions collect form web for “Каким образом данные хранятся в * .npy?”

Формат файла npy задокументирован в https://github.com/numpy/numpy/blob/master/doc/neps/npy-format.rst пользователя numpy.

Например, код

 >>> dt=numpy.dtype([('outer','(3,)<i4'), ... ('outer2',[('inner','(10,)<i4'),('inner2','f8')])]) >>> a=numpy.array([((1,2,3),((10,11,12,13,14,15,16,17,18,19),3.14)), ... ((4,5,6),((-1,-2,-3,-4,-5,-6,-7,-8,-9,-20),6.28))],dt) >>> numpy.save('1.npy', a) 

приводит к файлу:

 93 4E 55 4D 50 59 magic ("\x93NUMPY") 01 major version (1) 00 minor version (0) 96 00 HEADER_LEN (0x0096 = 150) 7B 27 64 65 73 63 72 27 3A 20 5B 28 27 6F 75 74 65 72 27 2C 20 27 3C 69 34 27 2C 20 28 33 2C 29 29 2C 20 28 27 6F 75 74 65 72 32 27 2C 20 5B 28 27 69 6E 6E 65 72 27 2C 20 27 3C 69 34 27 2C 20 28 31 30 2C 29 29 2C 20 28 27 69 6E 6E 65 72 32 Header, describing the data structure 27 2C 20 27 3C 66 38 27 "{'descr': [('outer', '<i4', (3,)), 29 5D 29 5D 2C 20 27 66 ('outer2', [ 6F 72 74 72 61 6E 5F 6F ('inner', '<i4', (10,)), 72 64 65 72 27 3A 20 46 ('inner2', '<f8')] 61 6C 73 65 2C 20 27 73 )], 68 61 70 65 27 3A 20 28 'fortran_order': False, 32 2C 29 2C 20 7D 20 20 'shape': (2,), }" 20 20 20 20 20 20 20 20 20 20 20 20 20 0A 01 00 00 00 02 00 00 00 03 00 00 00 (1,2,3) 0A 00 00 00 0B 00 00 00 0C 00 00 00 0D 00 00 00 0E 00 00 00 0F 00 00 00 10 00 00 00 11 00 00 00 12 00 00 00 13 00 00 00 (10,11,12,13,14,15,16,17,18,19) 1F 85 EB 51 B8 1E 09 40 3.14 04 00 00 00 05 00 00 00 06 00 00 00 (4,5,6) FF FF FF FF FE FF FF FF FD FF FF FF FC FF FF FF FB FF FF FF FA FF FF FF F9 FF FF FF F8 FF FF FF F7 FF FF FF EC FF FF FF (-1,-2,-3,-4,-5,-6,-7,-8,-9,-20) 1F 85 EB 51 B8 1E 19 40 6.28 

Формат описан в numpy / lib / format.py , где вы также можете увидеть исходный код Python, используемый для загрузки файлов npy. np.load определяется np.load .

  • Передача numpy массивов строковых форматов в fortran с использованием f2py
  • Почему в numpy `nan == nan` является False, а nan in является True?
  • Как установить / исправить неудачную установку numpy, которая работает на python 3.4, но не в 3.5?
  • Двигатели IPython возвращают разные результаты
  • Что такое эквивалент python / numpy num2cell ()?
  • как скопировать значение массива numpy в более высокие размеры
  • Множественные индексы для массива numpy: IndexError: не удалось принудительно ввести запись в slice типа numpy.ndarray в целое число
  • Как читать систему дифференциальных уравнений из текстового файла для решения системы с помощью scipy.odeint?
  • Python - лучший язык программирования в мире.