c样式的联合与numpy数据类型?

c样式的联合与numpy数据类型?,numpy,union,Numpy,Union,我对使用一些不均匀数据类型的numpy数组感兴趣。由于numpy指定数据必须是同质的,因此可以通过定义一个超级数据类型来实现,该超级数据类型充当所有子数据类型的联合包装器。然后,访问子数据类型的字段可以对基础数据进行不同的解释 例如,已经有了一些设备 dtype(('|S2', [('x', '|i1'), ('y', '|i1')])) 指由两个字节字符串组成的数组,但第一个字节和第二个字节也可以通过“x”和“y”字段名解释为整数。不过,我不知道如何将字段标签分配给双字节字符串 这是否可以更

我对使用一些不均匀数据类型的numpy数组感兴趣。由于numpy指定数据必须是同质的,因此可以通过定义一个超级数据类型来实现,该超级数据类型充当所有子数据类型的联合包装器。然后,访问子数据类型的字段可以对基础数据进行不同的解释

例如,已经有了一些设备

dtype(('|S2', [('x', '|i1'), ('y', '|i1')]))
指由两个字节字符串组成的数组,但第一个字节和第二个字节也可以通过“x”和“y”字段名解释为整数。不过,我不知道如何将字段标签分配给双字节字符串

这是否可以更一般化,以便我们可以在数据上覆盖任意数量的不同字段规范

我的第一次尝试是在数据类型中指定字段偏移量,但失败了,因为有人抱怨必须对偏移量进行排序(即非重叠数据)

dtype1=np.dtype(dict(
名称=['a','b'],

自2011年6月以来,允许使用formats=['| a2','Union数据类型:

您需要升级到NumPy 1.7.x才能使用此功能

但是,在以前的版本中,您可以使用覆盖数据类型构造函数:

>>> a = np.zeros(3, dtype=np.dtype(('<i2', [('a', '|a2')])))
>>> a[0] = 0x3456
>>> a['a'][0]
'V4'
a=np.zero(3,dtype=np.dtype(('
a=np.zeros(3, dtype='<a2')
b=a[:]
b.dtype='<i2'
>>> a = np.zeros(3, dtype=np.dtype(('<i2', [('a', '|a2')])))
>>> a[0] = 0x3456
>>> a['a'][0]
'V4'