将Numpy ASCII码数组转换为字符串

时间:2014-07-19 08:35:02

标签: python numpy

我想将表示ASCII代码的NumPy整数数组转换为相应的字符串。 例如,ASCII码97等于字符"a"。 我试过了:

from numpy import *
a=array([97, 98, 99])
c = a.astype('string')
print c

给出:

['9' '9' '9']

但我希望得到字符串"abc"

5 个答案:

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

优点是它适用于任意形状的数组。