我通常会像这样创建numpy dtypes:
C = np.dtype([('a',int),('b',float)])
但是,在我的代码中,我还在其他地方单独使用字段a
和b
:
A = np.dtype([('a',int)])
B = np.dtype([('b',float)])
为了维护性,我想从类型C
和A
中得到B
,不管怎么说:
C = np.dtype([A,B]) # this gives a TypeError
通过组合其他dtypes,numpy有没有办法创建复杂的dtypes?
答案 0 :(得分:4)
根据dtype documentation,dtypes具有属性descr
,该属性提供符合数组类型的" 数组接口的完整描述"。因此:
A = np.dtype([('a',int)]) # A.descr -> [('a', '<i4')]
B = np.dtype([('b',float)]) # B.descr -> [('b', '<f8')]
# then
C = np.dtype([A.descr[0], B.descr[0]])
答案 1 :(得分:3)
您可以使用dtypes的.descr
属性组合字段。例如,以下是您的A
和B
。请注意,.descr
attrbute是一个包含每个字段的条目的列表:
In [44]: A = np.dtype([('a',int)])
In [45]: A.descr
Out[45]: [('a', '<i8')]
In [46]: B = np.dtype([('b',float)])
In [47]: B.descr
Out[47]: [('b', '<f8')]
由于.descr
属性的值是列表,因此可以添加它们以创建新的dtype:
In [48]: C = np.dtype(A.descr + B.descr)
In [49]: C
Out[49]: dtype([('a', '<i8'), ('b', '<f8')])
答案 2 :(得分:0)
default/
中有一个回水模块,它有一堆结构化/ rec数组实用程序。
numpy
执行此类zip_descr
连接,但它以数组而非descr
开头:
dtypes