有人能解释这里发生了什么吗?
import numpy as np
test1 = ((154L, u'D2'), (155L, u'D2'), (156L, u'D2'))
print np.asarray(test1)
给出
[[u'15' u'D2']
[u'15' u'D2']
[u'15' u'D2']]
但是
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中的长整数发生了什么
答案 0 :(得分:0)
据我所知,它与unicode支持有关,如你所示:在第一种情况下,所有6个项目都舍入为2个字符。当你给它们时它们是长整数,但如果你做numpy.asarray(),它们就会变成unicode字符串,其长度与原始数组中最长的unicode字符串相同。在第一种情况下,即2个字符,在第二种情况下,它是3.因此,长整数将数据类型更改为与输入数组中最长的unicode字符串长度相同的unicode字符串。在那一刻,最后的数字消失了(不知道为什么,任何有更多unicode经验的人都知道这是否有意,或者这是不是一个错误?)
编辑:找到一个解决方案:将dtype指定为unicode(并获得正确的长度)
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']]
所以在这种情况下,'dtype = ...'表示最大长度为4的unicode,并产生正确的数组