【问题标题】:Concatenating all list values to an array in python将所有列表值连接到python中的数组
【发布时间】:2017-10-04 00:14:49
【问题描述】:

我想将 python dict 中的所有 numpy 数组(大小都相同)连接到一个新数组。

dict = {'some_key_1':np.array([1,2,3,4]), 'some_key_2':np.array([2,3,4,5]), ...}

我希望看到的结果是:

result = np.array([[1,2,3,4],[2,3,4,5]])

最好的方法是什么?

编辑:python 2 和 3 的解决方案似乎略有不同。接受的答案适用于 python 3。

【问题讨论】:

  • np.array(dict.values()) 怎么样?如果您的元素数量参差不齐,这可能是个问题。
  • result 是一个我无法使用的对象,而不是一个数组,不幸的是:array(dict_values([[1,2,3,4],[2,3,4,5]] ))
  • 我已经发布了一个使用vstack的python版本独立解决方案,看看:)

标签: python numpy dictionary concatenation


【解决方案1】:

可能是最简单的方法:

result = np.array(list(dict.values()))

使用list,字典的值将存储在一个列表中(即获得一个列表,其中每个项目都是一个 numpy 数组)。然后可以通过应用np.array() 将这个 numpy 数组列表本身转换为 numpy 数组。

但是,您不应该使用 dict 作为字典的名称,因为这会掩盖内置名称 dict。相反,使用例如:

result = np.array(list(dct.values()))

并确保将您的字典重命名为dct

【讨论】:

    【解决方案2】:

    你可以使用dictionary.values()获取字典的所有值并将其传递给numpy.array

    import numpy as np
    np.array(list(dict.values()))
    

    请不要使用dict作为名称,它是python中的保留关键字

    示例

    import numpy as np
    data = {'some_key_1':np.array([1,2,3,4]), 'some_key_2':np.array([2,3,4,5])}
    np.array(list(data.values()))
    

    输出

    array([[2, 3, 4, 5],
           [1, 2, 3, 4]])
    

    【讨论】:

      【解决方案3】:

      在 Python 3 中,您需要先将 dict.values() 转换为列表。

      dict.keys()、dict.values() 和 dict.items() 返回的对象 是视图对象。它们提供字典的动态视图 条目,这意味着当字典改变时,视图 反映了这些变化。 (https://docs.python.org/3/library/stdtypes.html#typesmapping)

      import numpy as np
      data = {'some_key_1':np.array([1,2,3,4]), 'some_key_2':np.array([2,3,4,5])}
      print(np.array(list(data.values())))
      # [[1 2 3 4]
      # [2 3 4 5]]
      

      你会得到一个二维数组,其中行的顺序是随机的(Python dicts 是无序的)。

      要获得一维数组,可以使用np.concatenate

      print(np.concatenate(list(data.values())))
      # [1 2 3 4 2 3 4 5]
      

      如果顺序很重要,您可以使用元组列表或OrderedDict 而不是dict

      【讨论】:

      • 谢谢!我使用 python 3.5
      猜你喜欢
      • 2018-04-27
      • 1970-01-01
      • 2016-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多