代码之家  ›  专栏  ›  技术社区  ›  ipramusinto

什么是<U12型?

  •  1
  • ipramusinto  · 技术社区  · 6 年前

    我用的是 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 回复  |  直到 6 年前
        1
  •  13
  •   Stephen Rauch Afsar Ali    6 年前

    <U12 这是一个numpy类型:

    <

    U

    12

    Source )

        2
  •  3
  •   Paul Panzer    6 年前

    区别在于元素的存储方式。

    <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]