如何用numpy数组中的字典值替换字符?

时间:2017-01-17 05:55:28

标签: python arrays numpy dictionary

我想将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:不可用类型:'numpy.ndarray'

3 个答案:

答案 0 :(得分:2)

我想你想要:

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

或者列表理解:

{{1}}

答案 1 :(得分:1)

你的val数组是2d,所以你必须小心迭代它。

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')

它会对阵列进行迭代,因此不会提供很多速度优势,但它会照顾“广播”,处理二维阵列而无需我们做额外的工作。

答案 2 :(得分:0)

new_val = ''
for v in val:
    s = ''.join(d[n] for n in v[0])
    new_val += s + ' '
new_val = new_val.strip(' ')