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

0 投票
1 回答
1008 浏览
提问于 2025-04-18 06:19

我有一大堆数据需要用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']

撰写回答