如何正确地将字符串数据传递给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 个回答
2
你需要在字符串的数据类型中指定字节数。否则,numpy会把字节数设置为1:
In [44]: npdata['label'].dtype
Out[44]: dtype('S1')
这样会导致你的数据被截断。
所以,比如说,如果你把 S
替换成 |S20
,那么这个字符串的数据类型就可以支持最多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']