我想将表示ASCII代码的NumPy整数数组转换为相应的字符串。
例如,ASCII码97等于字符"a"
。
我试过了:
from numpy import *
a=array([97, 98, 99])
c = a.astype('string')
print c
给出:
['9' '9' '9']
但我希望得到字符串"abc"
。
答案 0 :(得分:7)
print "".join([chr(item) for item in a])
<强>输出强>
abc
答案 1 :(得分:5)
另一个不涉及离开NumPy世界的解决方案是将数据视为字符串:
arr = np.array([97, 98, 99], dtype=np.uint8).view('S3').squeeze()
或者你的numpy数组不是8位整数:
arr = np.array([97, 98, 99]).astype(np.uint8).view('S3').squeeze()
在这些情况下,您必须在数据类型中附加正确的长度(例如,对于3个字符的字符串为“S3”)。
答案 2 :(得分:4)
使用ascii编解码器创建一个字节数组并解码字节表示:
np.array([98,97,99], dtype=np.int8).tostring().decode("ascii")
请注意,tostring
命名错误,它实际上返回的字节恰好是python2中的字符串,在python3中,您将获得需要解码的字节类型。
答案 3 :(得分:1)
只想发布一种替代方式,即使我发现@Ashoka的解决方案很有用。
from numpy import array
a = array([97, 98, 99])
print("{0:c}{1:c}{2:c}").format(a[0], a[1], a[2])
当然,“加入”和列表理解也可以在这里使用。
答案 4 :(得分:1)
对于大型数据集,依赖于Python循环或字符串格式的解决方案将很慢。如果您知道所有数据都是ASCII,则更快的方法可能是使用花式索引:
import numpy as np
a = np.array([97, 98, 99])
np.array([chr(x) for x in range(127)])[a]
# array(['a', 'b', 'c'], dtype='<U1')
优点是它适用于任意形状的数组。