我想将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'
答案 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(' ')