Python 在*.npy中存储数据的方式是什么?

Python 在*.npy中存储数据的方式是什么?,python,numpy,Python,Numpy,我正在使用NumPy.save函数保存NumPy数组。 我希望其他开发人员能够使用C语言从这些文件中读取数据。 所以我需要知道,numpy是如何组织文件中的二进制数据的。好的,当我保存“i4”数组时,这是显而易见的,但是包含一些结构的数组呢?在文档中找不到任何信息 UPD: 假设tha数据类似于: dt = np.dtype([('outer','(3,)<i4'),('outer2',[('inner','(10,)<i4'),('inner2','f8')])]) 从C中读取该

我正在使用NumPy.save函数保存NumPy数组。 我希望其他开发人员能够使用C语言从这些文件中读取数据。 所以我需要知道,numpy是如何组织文件中的二进制数据的。好的,当我保存“i4”数组时,这是显而易见的,但是包含一些结构的数组呢?在文档中找不到任何信息

UPD: 假设tha数据类似于:

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

从C中读取该内容是真的吗?

npy文件格式在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)

dt=numpy.dtype([('outer','(3,)格式在中进行了描述,您还可以在中看到用于加载npy文件的Python源代码。
np.load
已定义。

谢谢,这是最简单的示例。关于包含一些结构的数组,如何处理?在这种情况下,数据的顺序是什么?在您的示例中,矩阵元素按行存储,很明显,我想知道如何处理numpy商店复杂data@taras:请参阅更新。如果问题还不够复杂,您应该编辑问题以显示问题的复杂程度(示例数据)。npy格式的URL不再有效。新URL为:@BmyGuest已更改为永久链接。
>>> 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