【问题标题】:Convert a tuple to a numpy array corrupts the data将元组转换为 numpy 数组会破坏数据
【发布时间】:2013-11-28 11:13:09
【问题描述】:

有人能解释一下这里发生了什么吗?

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 中的长整数发生了什么

【问题讨论】:

    标签: python numpy type-conversion


    【解决方案1】:

    据我了解,它与 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,并生成正确的数组

    【讨论】:

      猜你喜欢
      • 2012-04-18
      • 2021-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多