如何正确地将字符串数据传递给numpy记录数组(并将其取出)

时间:2014-05-12 18:25:25

标签: python numpy

我需要使用Numpy操作大量数据。此数据集包含下游处理所需的字符串。当我将数据转换为结构化数组时,我指定数据是一个字符串。我创建了没有任何错误的记录数组,但是,当我尝试将数据转换回嵌套列表列表时,我的字符串数据消失了。这是一个样本......

import numpy as np

data = [
    [100.0, 400.0, 'stringhere'],
    [200.0, 500.0, 'another sting'],
]

npdata = np.array(map(tuple, data),
                dtype=([('x', 'float64'), ('y', 'float64'), ('label', 'S'), ])
)

for entry in npdata:
    print list(entry)

这打印...... [100.0,400.0,''] [200.0,500.0,'0']

我是结构化数组的新手,所以我假设我要么错误地指定了我的数据类型,要么我误解了结构化数组如何处理字符串。如何从结构化数组中获取字符串数据?

1 个答案:

答案 0 :(得分:1)

您需要指定字符串dtype中的字节数。否则,numpy将字节数设置为1:

In [44]: npdata['label'].dtype
Out[44]: dtype('S1')

并截断您的数据。

因此,例如,如果将S替换为|S20,则字符串dtype将支持最多20个字节的字符串:

npdata = np.array(map(tuple, data),
                dtype=([('x', 'float64'), ('y', 'float64'), ('label', '|S20'), ]))

for entry in npdata:
    print list(entry)

的产率:

[100.0, 400.0, 'stringhere']
[200.0, 500.0, 'another sting']