Насколько я понимаю, он имеет отношение к поддержке unicode, как вы показываете: в первом случае все 6 элементов округляются до двух символов. Они являются длинными целыми числами, поскольку вы их вводите, но если вы делаете numpy.asarray(), они становятся строками unicode с той же длиной, что и самая длинная строка юникода, которая была в исходном массиве. В первом случае это 2 символа, а во втором случае - 3. Таким образом, длинные целые числа изменяют тип данных, чтобы стать строками 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, и результаты в правом массиве
Любая идея, как это исправить? –
@OlivierCloarec Нашел решение и отредактировал мой ответ – usethedeathstar
Отлично! Большое спасибо!!! –