更新: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
?
答案 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
给出了更广泛的解释