如何从其他dtypes创建一个numpy dtype?

时间:2016-09-14 17:50:06

标签: python numpy numpy-dtype

我通常会像这样创建numpy dtypes:

C = np.dtype([('a',int),('b',float)])

但是,在我的代码中,我还在其他地方单独使用字段ab

A = np.dtype([('a',int)])
B = np.dtype([('b',float)])

为了维护性,我想从类型CA中得到B,不管怎么说:

C = np.dtype([A,B])    # this gives a TypeError

通过组合其他dtypes,numpy有没有办法创建复杂的dtypes?

3 个答案:

答案 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属性组合字段。例如,以下是您的AB。请注意,.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