【问题标题】:How to replace character with a dictionary value in numpy array?如何用numpy数组中的字典值替换字符?
【发布时间】:2017-01-17 05:55:28
【问题描述】:

我想将 numpy 数组中的字符替换为字典中的特定值。比如我想把6837换成fhcg,同样的数组格式。

这是我尝试过的

import numpy 
val=numpy.array([["6837"],["7628"],["3804"],["3031"],["9848"],["8481"],["1220"],["7701"],["7934"]])
d={'1':'a','2':'b','3':'c','4':'d','5':'e','6':'f','7':'g','8':'h','9':'i','0':'x'}

rep = [d[v] for v in val]
new_val= ' '.join(rep)

但它给出了这个错误

TypeError: unhashable type: 'numpy.ndarray'

【问题讨论】:

    标签: python arrays numpy dictionary


    【解决方案1】:

    我想你想要:

    rep = []
    for v in val:
        st = ''.join(d[ch] for ch in v[0])
        rep.append(st)
    new_val= ' '.join(rep)
    

    或者使用列表理解:

    rep = [ ''.join(d[ch] for ch in v[0]) for v in val ]
    

    【讨论】:

      【解决方案2】:

      您的val 数组是二维的,因此您必须小心如何对其进行迭代。

      In [255]: val.shape
      Out[255]: (9, 1)
      

      让我们定义一个转换一个字符串的小函数;转换是逐个字符的 - 这是一个纯字符串操作。

      def foo(astr):
         return ''.join([d[v] for v in astr])
      

      我们可以在列表推导或其他迭代器中使用它。但这是np.vectorize 做得很好的一个案例。

      In [257]: f = np.vectorize(foo)
      In [258]: f(val)
      Out[258]: 
      array([['fhcg'],
             ['gfbh'],
             ['chxd'],
             ['cxca'],
             ['ihdh'],
             ['hdha'],
             ['abbx'],
             ['ggxa'],
             ['gicd']], 
            dtype='<U4')
      

      它确实在数组上进行迭代,因此不会提供太多速度优势,但它负责“广播”,无需我们额外工作即可处理二维数组。

      【讨论】:

        【解决方案3】:
        new_val = ''
        for v in val:
            s = ''.join(d[n] for n in v[0])
            new_val += s + ' '
        new_val = new_val.strip(' ')
        

        【讨论】:

          猜你喜欢
          • 2020-09-10
          • 2015-03-10
          • 1970-01-01
          • 2016-02-02
          • 2018-09-11
          • 2020-09-16
          • 1970-01-01
          • 2017-07-15
          • 1970-01-01
          相关资源
          最近更新 更多