Что такое тип - PullRequest
       5

Что такое тип

0 голосов
/ 19 сентября 2018

Я использовал pandas и numpy для обработки некоторых данных, пока не получил два одинаковых вывода массивов:

array(['french', 'mexican', 'cajun_creole', ..., 'southern_us', 'italian',
       'thai'], dtype='<U12')

array(['french', 'mexican', 'cajun_creole', ..., 'jamaican', 'italian',
   'thai'], dtype=object)

Я не вижу разницы, что такое <U12?

Ответы [ 2 ]

0 голосов
/ 19 сентября 2018

Разница заключается в том, как элементы хранятся.

<U12 сохраняет их плоскими, дополняя нулями каждую запись до длины 12. Чтобы увидеть это, мы можем использовать tobytes для прямого доступа к буферу данных:

>>> au
array(['french', 'mexican', 'cajun_creole', 'Ellipsis', 'southern_us',
       'italian', 'thai'], dtype='<U12')
>>> 
>>> sz = au.dtype.itemsize
>>> [au.tobytes()[i:i+sz].decode('utf32') for i in range(0, au.size * sz, sz)]
['french\x00\x00\x00\x00\x00\x00', 'mexican\x00\x00\x00\x00\x00', 'cajun_creole', 'Ellipsis\x00\x00\x00\x00', 'southern_us\x00', 'italian\x00\x00\x00\x00\x00', 'thai\x00\x00\x00\x00\x00\x00\x00\x00']

object хранит только ссылки на объекты, то есть указатели на str объекты.Мы можем проверить это, используя тот факт, что --- в текущей реализации CPython --- id возвращает адрес памяти объекта Python:

>>> ao
array(['french', 'mexican', 'cajun_creole', Ellipsis, 'southern_us',
       'italian', 'thai'], dtype=object)
>>> 
>>> sz = ao.dtype.itemsize
>>> [int.from_bytes(ao.tobytes()[i:i+sz], 'little') for i in range(0, ao.size * sz, sz)]
[140626141129896, 140625895652128, 140625895628080, 8856512, 140625895627504, 140626141132200, 140626343518024]
>>> [id(it) for it in ao]
[140626141129896, 140625895652128, 140625895628080, 8856512, 140625895627504, 140626141132200, 140626343518024]
0 голосов
/ 19 сентября 2018

<U12 Это тип numpy:

< Little Endian

U Unicode

12 12 символов:

( Источник )

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...