【问题标题】:Map numpy array using dict?使用dict映射numpy数组?
【发布时间】:2021-01-28 18:33:29
【问题描述】:

我有一个可能很长的 1 和 0 数组,如下所示: a = [0,0,1,0,1,0,.....] 我想将每对连续的值转换为 0 和 3 之间的整数,如下所示:

  • 0,0 -> 0
  • 0,1 -> 1
  • 1,0 -> 3
  • 1,1 -> 2

我正在寻找一种干净有效的方法来使用上面的映射创建数组 b(下面的示例输出): b = [0, 3, 3,...]

dict 是个好主意吗?我不知道该怎么做。

【问题讨论】:

    标签: python numpy dictionary


    【解决方案1】:

    试试:

    x = np.reshape(a, (-1,2))
    
    b = x[:,0]*2 + (x[:,0] ^ x[:,1])
    

    【讨论】:

    • 感谢您找出使用函数的方法。我在想我必须创建一张地图。
    【解决方案2】:

    如果您想使用具有相应十进制数之间显式映射的字典,您可以试试这个:

    # Convert to a (-1,2) matrix and decimal numbers first
    a = np.reshape(a, (-1,2))
    a = np.sum(np.array([2,1])*a, axis=1)
    
    # Define dictionary with mapping
    D = {0: 0, 1: 1, 2: 3, 3: 2}
    
    # Apply dictionary
    a = [D[x] for x in a]
    

    【讨论】:

    • 谢谢。我有重塑的想法,但一直试图弄清楚如何使用 2 元素数组作为 dict 中的键。
    【解决方案3】:

    您可以使用连续对作为索引来执行查找,以获得翻译后的值:

    master = np.array([[0, 1],[3, 2]])
    b = master[a[::2], a[1::2]]
    

    测试输入:

    [1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1]
    

    输出:

    [2, 1, 2, 2, 1, 1, 0, 3]
    

    【讨论】:

    • 问题中给出的映射将是Gray code 的标准映射。没有理由认为这是一个错字。
    • @user2357112supportsMonica -- 感谢您的指出。我现在修改了我的答案。
    猜你喜欢
    • 1970-01-01
    • 2011-10-13
    • 2018-06-10
    • 2011-02-15
    • 2018-08-31
    • 2013-01-18
    • 2013-11-07
    • 2014-08-25
    • 2021-08-05
    相关资源
    最近更新 更多