【问题标题】:How to replace values of a 2d array with values of a list based on index如何用基于索引的列表值替换二维数组的值
【发布时间】:2021-11-19 11:35:00
【问题描述】:

我想知道是否可以根据 Python 中的索引将二维数组的元素替换为列表的元素:

我们说

a = np.array([[6, 5, 9, 6, 1],[2, 9, 0, 6, 5],[8, 8, 0, 1, 8],[9, 5, 3, 6, 3]])
d = ['a','b','c','d','e','f','g','h','i','j]

我想用列表 d 的元素替换数组 a 的元素。数组 a 的值定义了列表 d 的索引号。

我想要一个像 c 这样的二维数组,

c = np.array([['g','f','j','g','b'],['c','j','a','g','e'],['i','i','a','b','i'],['j','f','d','g','d']])

【问题讨论】:

  • 请提供足够的代码,以便其他人更好地理解或重现问题。

标签: python string list numpy indexing


【解决方案1】:

试试这个:

>>> a=np.array([[6, 5, 9, 6, 1],[2, 9, 0, 6, 5],[8, 8, 0, 1, 8],[9, 5, 3, 6, 3]])
>>> d=np.array(['a','b','c','d','e','f','g','h','i','j'])
>>> d[a]
array([['g', 'f', 'j', 'g', 'b'],
       ['c', 'j', 'a', 'g', 'f'],
       ['i', 'i', 'a', 'b', 'i'],
       ['j', 'f', 'd', 'g', 'd']], dtype='<U1')
>>> list(map(list,(d[a])))
[['g', 'f', 'j', 'g', 'b'],
 ['c', 'j', 'a', 'g', 'f'],
 ['i', 'i', 'a', 'b', 'i'],
 ['j', 'f', 'd', 'g', 'd']]

【讨论】:

    【解决方案2】:

    你可以使用一个简单的循环:

    a=np.array([[6, 5, 9, 6, 1],[2, 9, 0, 6, 5],[8, 8, 0, 1, 8],[9, 5, 3, 6, 3]])
    d=['a','b','c','d','e','f','g','h','i','j']
     
    all_value = []
    for i in a:
        value = []
        for j in i:
            value.append(d[j])
        all_value.append(value)
    np.array(all_value)
    

    【讨论】:

      【解决方案3】:

      实际上,您可以通过多种方式做到这一点。

      第一种方法是使用列表推导:

      import numpy as np
          
      a = np.array([[6, 5, 9, 6, 1],
                    [2, 9, 0, 6, 5],
                    [8, 8, 0, 1, 8],
                    [9, 5, 3, 6, 3]
                    ])
                        
      d = np.array(['a','b','c','d','e','f','g','h','i','j'])
          
      c = np.array([[d[j] for j in a[i]] for i in range(len(a))])
      

      您还可以使用以下内容:

      import numpy as np
      
      a = np.array([[6, 5, 9, 6, 1],
                    [2, 9, 0, 6, 5],
                    [8, 8, 0, 1, 8],
                    [9, 5, 3, 6, 3]
                    ])
                
      d = np.array(['a','b','c','d','e','f','g','h','i','j'])
      
      c = d[a[:]]
      

      您也可以使用 for 循环驱动的代码,但如果您选择这样做,那么我建议您放弃它并使用列表理解。

      【讨论】:

        猜你喜欢
        • 2021-11-14
        • 1970-01-01
        • 2023-01-25
        • 2012-11-14
        • 2021-08-28
        • 2016-09-19
        • 1970-01-01
        • 2015-06-16
        • 2017-05-04
        相关资源
        最近更新 更多