Python 将元组转换为numpy数组会损坏数据

Python 将元组转换为numpy数组会损坏数据,python,numpy,type-conversion,Python,Numpy,Type Conversion,有人能解释这是怎么回事吗 import numpy as np test1 = ((154L, u'D2'), (155L, u'D2'), (156L, u'D2')) print np.asarray(test1) 给予 但是 test2 =((154L, u'SG2'), (155L, u'SG2'), (156L, u'SG1')) print np.asarray(test2) 我们获得 [[u'154' u'SG2'] [u'155' u'SG2'] [u'156' u'SG1

有人能解释这是怎么回事吗

import numpy as np

test1 = ((154L, u'D2'), (155L, u'D2'), (156L, u'D2'))
print np.asarray(test1)
给予

但是

test2 =((154L, u'SG2'), (155L, u'SG2'), (156L, u'SG1'))
print np.asarray(test2)
我们获得

[[u'154' u'SG2']
[u'155' u'SG2']
[u'156' u'SG1']]

test1中的长整数发生了什么?据我所知,它与unicode支持有关,如您所示:在第一种情况下,所有6个项目都四舍五入为2个字符。它们是您输入的长整数,但如果执行numpy.asarray(),它们将成为unicode字符串,长度与原始数组中最长的unicode字符串相同。第一种情况是2个字符,第二种情况是3个字符。因此,长整数将数据类型更改为与输入数组中最长的unicode字符串长度相同的unicode字符串。在那一刻,最后的数字消失了(不知道为什么,任何有更多unicode经验的人都知道这是有意的,还是这是一个bug?)

编辑:找到解决方案:将数据类型指定为unicode(并获得正确的长度)

test3=((154L,u'SG'),(15L,u'SG3'),(1564L,u'SG'))
打印(numpy.asarray)(test3,dtype=)
[[u'154' u'SG2']
[u'155' u'SG2']
[u'156' u'SG1']]
test3 =((154L, u'SG'), (15L, u'SG3'), (1564L, u'SG'))

print(numpy.asarray(test3, dtype='<U4'))

[[u'154' u'SG']
 [u'15' u'SG3']
 [u'1564' u'SG']]