【问题标题】:Array of strings from dict iterable: what dtype to use?来自dict iterable的字符串数组:使用什么dtype?
【发布时间】:2021-09-28 21:06:02
【问题描述】:

我的字典结构如下:

mydict = {'Sample1': ['0|0','0|1','0|0'],
          'Sample2': ['0|0','1|1','0|0'],
          'Sample3': ['0|1','0|1','1|0'] }

我想把它转换成这样的数组:

myarray = [['0|0','0|1','0|0'],
           ['0|0','1|1','0|0'],
           ['0|1','0|1','1|0']]

我看到here np.fromiter 是我应该使用的功能,但我正在努力使用dtype

myarray = np.fromiter(mydict.values(), dtype=str) 给了我错误“ValueError:使用可变大小数据类型时必须指定长度。”

我读到here,符号“Sfoo”允许您指定您只使用长度为 foo 的字符串,但是当我尝试myarray = np.fromiter(mydict.values(), dtype='S3) 时,它会产生这个错误,我正在努力解决这个错误:“ValueError : 设置一个带有序列的数组元素。"

【问题讨论】:

    标签: python string numpy dictionary


    【解决方案1】:

    您可以解压字典值并将其传递给np.array,您将得到您要查找的数组。

    >>> np.array([*mydict.values()])
    array([['0|0', '0|1', '0|0'],
           ['0|0', '1|1', '0|0'],
           ['0|1', '0|1', '1|0']], dtype='<U3')
    

    如果您希望 dtype 为 S3(通常是字节字符串表示形式,其中 3 表示长度),另一种方法可能是使用 np.char.encode 并在字典中传递解压缩的值。

    >>> np.char.encode([*mydict.values()])
    array([[b'0|0', b'0|1', b'0|0'],
           [b'0|0', b'1|1', b'0|0'],
           [b'0|1', b'0|1', b'1|0']], dtype='|S3')
    

    【讨论】:

    • 现在尝试一下,似乎有效。 mydict 前面的 * 有什么作用?
    • [*mydict.values()] 基本上会从字典中的所有值中创建一个列表,称为值解包,与list(mydict.values()) 相同
    【解决方案2】:

    你不需要numpy,你可以这样做

    myarray = list(mydict.values())
    

    【讨论】:

      猜你喜欢
      • 2021-11-20
      • 1970-01-01
      • 2019-05-19
      • 2015-06-12
      • 1970-01-01
      • 2020-03-06
      • 2018-02-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多