将NumPy字符数组转换为字符串

时间:2014-12-19 18:53:50

标签: python arrays numpy chars

我有一个numpy字符数组,当我把它写入文件时,它写为:

['K' 'R' 'K' 'P' 'T' 'T' 'K' 'T' 'K' 'R' 'G' 'L']

我希望它只用字母写,不带括号或引号,即:

KRKPTTKTKRGL 

我已经查看了numpy文档,从我收集到的解决方案是一个chararray然而它看起来不像普通数组那样功能。

任何帮助都会很棒。谢谢!

5 个答案:

答案 0 :(得分:9)

如果您只是一个numpy数组,那么为什么不直接将它转换为字符串以写入您的文件?你可以使用str.join来接受一个可迭代的(list,numpy数组等)。

import numpy as np

arr = np.array(['K', 'R', 'K', 'P', 'T', 'T', 'K', 'T', 'K', 'R', 'G', 'L'])

s = ''.join(arr)
# KRKPTTKTKRGL

答案 1 :(得分:5)

您可以使用tostring()的{​​{1}}方法作为:

numpy

由于您拥有>>> st = np.array(['K' 'R' 'K' 'P' 'T' 'T' 'K' 'T' 'K' 'R' 'G' 'L']) >>> st.tostring() 'KRKPTTKTKRGL' 数组,因此此方法将比numpy更快。

对于Python3x join()可以用作:

tostring()

答案 2 :(得分:1)

"".join(['K' 'R' 'K' 'P' 'T' 'T' 'K' 'T' 'K' 'R' 'G' 'L'])

答案 3 :(得分:1)

以一种麻木的方式,您可以执行以下操作:

使用F字符串(仅适用于Python 3.4 +)

s = arr.view(f'U{arr.size}')[0]

使用默认字符串:

s = arr.view('U' + str(arr.size))[0]

在这两种方法中,我们都将数组转换为数组大小的可用unicode (check the kind attribute at page bottom)格式。

如果您尝试将其转换为dtype,则是字符串的numpy.array

In[15]: import numpy as np
In[16]: arr = np.array(['KRKPTTKTKRGL'])
In[17]: arr.dtype
Out[17]: dtype('<U12')

注意:它适用于非英文字母。

答案 4 :(得分:0)

如果使用tofile()方法将数组保存到文件,则默认分隔符为空字符串""

所以,如果您的数组是这样,

st = np.array(['K', 'R', 'K', 'P', 'T', 'T', 'K', 'T', 'K', 'R', 'G', 'L'])

然后,如果你正在使用Python 2,

>>> st.tofile('myfile.txt')

创建一个包含以下内容的文件:

KRKPTTKTKRGL

如果你正在使用Python 3,你可能需要首先将数组显式地转换为S字符串类型:

>>> st.astype('|S1').tofile('myfile.txt')