4

我有一个看起来像这样的数据结构:

data = [ ('a', 1.0, 2.0),
         ('b', 2.0, 4.0),
         ('c', 3.0, 6.0) ]

我想使用 numpy 将其转换为结构化数组。但是,当我尝试以下操作时,我保留了浮点数,但我丢失了字符串信息:

import numpy
x = numpy.array(data, dtype=[('label', str), ('x', float), ('y', float)])
print x

导致:

>>> [('', 1.0, 2.0) ('', 2.0, 4.0) ('', 3.0, 6.0)]

谁能解释为什么会发生这种情况,以及我如何保留字符串信息?

4

1 回答 1

4

如果您打印出数组并仔细查看,您可以看到问题:

>>> numpy.array(data, dtype=[('label', str), ('x', float), ('y', float)])
array([('', 1.0, 2.0), ('', 2.0, 4.0), ('', 3.0, 6.0)], 
      dtype=[('label', '|S0'), ('x', '<f8'), ('y', '<f8')])

第一个字段的数据类型为'|S0'——零宽度字符串字段。使字符串字段更长——这是一个 2 字符的字符串字段:

>>> numpy.array(data, dtype=[('label', 'S2'), ('x', float), ('y', float)])
array([('a', 1.0, 2.0), ('b', 2.0, 4.0), ('c', 3.0, 6.0)], 
      dtype=[('label', '|S2'), ('x', '<f8'), ('y', '<f8')])

您也可以这样做,如此处所述

>>> numpy.array(data, dtype=[('label', (str, 2)), ('x', float), ('y', float)])
array([('a', 1.0, 2.0), ('b', 2.0, 4.0), ('c', 3.0, 6.0)], 
      dtype=[('label', '|S2'), ('x', '<f8'), ('y', '<f8')])
于 2012-10-13T14:26:53.870 回答