字符串数组被意外截断(Python 3.5)

时间:2017-07-10 01:49:33

标签: python python-3.x

我想将一个字符串列表加入到一个数组元素中,但是我得到一个奇怪的截断错误。这有效:

>>> x = ' '.join(np.array(['water','road','agriculture','habitation']))
>>> print(x)
'water road agriculture habitation'

我需要为一个60000+对象的数组执行此操作,但是一旦我添加for循环,长字符串的末尾就会被截断。这是一个简化版本:

>>> y = np.zeros([3,2]).astype(str)
>>> y[:,0] = ['image_1','image_2','image_3']
>>> for i in range(3):
...    z = np.array(['water','road','agriculture','habitation'])
...    y[i,1] = ' '.join(z)
>>> print(y)
[['image_1' 'water road agriculture habitatio']
 ['image_2' 'water road agriculture habitatio']
 ['image_3' 'water road agriculture habitatio']]

我对造成这种情况的原因感到茫然。有什么建议吗?

1 个答案:

答案 0 :(得分:0)

str不是NumPy类型,并且不适合NumPy的类型系统,因为它具有任意长度。我无法找到实际记录的位置,但是当您请求此类型时,您获得的实际上是'S32' - 每个元素都会获得分配给它的32个字符的空间,除此之外的任何内容都会丢失。

您可以明确地使用更长的字符串类型'S40'来保存您需要的最长字符串 - 但如果平均字符串长度远小于最大字符串,则会浪费大量内存。最好使用object(或'O')类型,以便数组保存对普通Python对象的引用 - 您的字符串将正常运行。