【问题标题】:Constructing a ndarray of values from another ndarray containing dictionary keys从包含字典键的另一个数组构造一个值数组
【发布时间】:2019-01-18 21:42:08
【问题描述】:

我有一个 ndarray,其中包含按特定顺序排列的字典键。我想创建另一个包含各个键值的 ndarray。必须维持秩序。 显而易见的方法是逐个元素地遍历包含键的数组,但问题是无法事先知道数组的形状。

是否可以展平键的 ndarray 并对其进行迭代以生成平坦的 ndarray 值并最终解开它而不损害顺序?

 mydict = {'a':1, 'b':2, 'c':3, 'd':4, 'e':5, 'f':6}
 input_pattern = np.array([['a', 'f'], ['b', 'e'], ['c', 'd']])
 expected_output = np.array([[1, 6], [2, 5], [3, 4]])

N。 B. :在上面的示例中,模式数组是二维的,可能并非总是如此。它也可能不包含字典的所有键。

【问题讨论】:

    标签: python python-3.x numpy dictionary numpy-ndarray


    【解决方案1】:

    您可以将np.vectorizedict.get 一起使用:

    d = np.vectorize(mydict.get)
    
    res = d(input_pattern)
    
    print(res)
    
    array([[1, 6],
           [2, 5],
           [3, 4]])
    

    【讨论】:

    • 这太棒了。谢谢。
    【解决方案2】:

    问题是没有办法知道数组的形状 提前。

    我们可以尝试使用flat + 列表理解 + reshape

    np.array([mydict[v] for v in input_pattern.flat]).reshape(input_pattern.shape)
    
    array([[1, 6],
           [2, 5],
           [3, 4]])
    

    flat 从数组中生成一维迭代器,我们稍后使用reshape 恢复input_pattern 的形状。

    【讨论】:

      猜你喜欢
      • 2011-02-10
      • 2019-10-05
      • 1970-01-01
      • 2014-05-24
      • 2012-03-09
      • 2020-08-23
      • 2018-03-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多