我想将一个字符串列表加入到一个数组元素中,但是我得到一个奇怪的截断错误。这有效:
>>> 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']]
我对造成这种情况的原因感到茫然。有什么建议吗?
答案 0 :(得分:0)
str
不是NumPy类型,并且不适合NumPy的类型系统,因为它具有任意长度。我无法找到实际记录的位置,但是当您请求此类型时,您获得的实际上是'S32'
- 每个元素都会获得分配给它的32个字符的空间,除此之外的任何内容都会丢失。
您可以明确地使用更长的字符串类型'S40'
来保存您需要的最长字符串 - 但如果平均字符串长度远小于最大字符串,则会浪费大量内存。最好使用object
(或'O'
)类型,以便数组保存对普通Python对象的引用 - 您的字符串将正常运行。