pythonnumpy:指定复合数据类型的项大小不会';行不通

pythonnumpy:指定复合数据类型的项大小不会';行不通,python,numpy,Python,Numpy,我做错什么了吗 >>> import numpy as np >>> dt = np.dtype({"names": ["First"], "formats": [np.uint32], "offsets": [3], "itemsize": 8}) >>> dt.itemsize 7 在我看来,它像一只虫子。但是,如果在

我做错什么了吗

>>> import numpy as np
>>> dt = np.dtype({"names": ["First"], 
                   "formats": [np.uint32], 
                   "offsets": [3], 
                   "itemsize": 8})
>>> dt.itemsize
7

在我看来,它像一只虫子。但是,如果在结尾只需要n字节的填充,则复合类型可能会有所帮助:

import numpy as np
dt = np.dtype({"names": ["First", "_"], 
               "formats": [np.uint32, (np.void,1)], 
               "offsets": [3,7],
})
arr = np.empty( (5,), dtype=dt )

你能指出numpy中“itemsize”的文档吗?从我使用的初始值设定项的文档来看:itemsize键允许设置数据类型的总大小,并且必须是足够大的整数,以便所有字段都在数据类型内。如果构造的数据类型是对齐的,那么itemsize也必须可以被结构对齐整除。我刚刚检查了它。是的,这看起来像个bug。我对格式和偏移量进行了一些操作,返回的itemsize似乎是格式的itemsize+偏移量。所以,如果格式为np.int64,偏移量为2,则返回的itemsize为10。为什么?我不知道。。!是的,这就是7的来源:偏移量为3,项目大小为4。但它仍然不是我指定的。实际上,这很好,因为它将节省一点内存,所以我只是根据项目大小调整用于填充后续数组的缓冲区大小。这是一个不错的解决办法。