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

2024-10-04 07:37:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我想将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'


Tags: inimportnumpynewfor字典格式错误
3条回答

您的val数组是2d的,因此您必须注意如何迭代它。在

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

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

^{pr2}$

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

^{3}$

它确实在数组上迭代,所以没有提供太多的速度优势,但是它负责“广播”,处理2d数组,而不需要我们额外的工作。在

我想你想要:

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

或列表理解:

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

相关问题 更多 >