Numpy bug?如何对齐numpy记录数组(“重新排列”)?

时间:2014-10-21 22:46:08

标签: python numpy memory-alignment

更新:numpy bug


不幸的是以下内容:

import numpy as np
a = np.zeros(4, dtype=np.dtype([('t', '<f8'), ('d', [('a', '<i4'), ('b', '<f8')], (100,))], align=True))
b = np.require(a, requirements=['ALIGNED'])
print([x.flags['ALIGNED'] for x in [a, b]])

打印[False, False]

如何对齐a

1 个答案:

答案 0 :(得分:4)

您可以在dtype中指定对齐要求。

In [9]: a = np.zeros(4, dtype= np.dtype([('x', '<f8'), ('y', '<i4')], align=False))

In [10]: a.data
Out[10]: <read-write buffer for 0x2f94440, size 48, offset 0 at 0x2f8caf0>

In [11]: a = np.zeros(4, dtype=np.dtype([('x', '<f8'), ('y', '<i4')], align=True))
In [12]: a.data
Out[12]: <read-write buffer for 0x2f94030, size 64, offset 0 at 0x2f8c5b0>

请注意尺寸的差异。对于结构化类型,在Numpy的早期版本中,对齐标志具有误导性,现在要求字符串和结构化类型为16个字节,以便在SPARC上正常工作。朱利安泰勒在http://article.gmane.org/gmane.comp.python.numeric.general/59123

给出了更广泛的解释