【发布时间】:2014-12-19 18:53:49
【问题描述】:
我有一个 numpy 字符数组,当我将它写入文件时,它会写成:
['K' 'R' 'K' 'P' 'T' 'T' 'K' 'T' 'K' 'R' 'G' 'L']
我希望它只写字母,不带括号或引号,即:
KRKPTTKTKRGL
我查看了 numpy 文档,根据我收集到的信息,解决方案是一个 chararray,但它看起来不像普通数组那样实用。
任何帮助都会很棒。谢谢!
【问题讨论】:
我有一个 numpy 字符数组,当我将它写入文件时,它会写成:
['K' 'R' 'K' 'P' 'T' 'T' 'K' 'T' 'K' 'R' 'G' 'L']
我希望它只写字母,不带括号或引号,即:
KRKPTTKTKRGL
我查看了 numpy 文档,根据我收集到的信息,解决方案是一个 chararray,但它看起来不像普通数组那样实用。
任何帮助都会很棒。谢谢!
【问题讨论】:
以一种 numpy 的方式,你可以这样做:
使用 F-String (仅适用于 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) 格式的数组大小。
如果您尝试将其转换为numpy.array,则字符串的dtype 是哪个
In[15]: import numpy as np
In[16]: arr = np.array(['KRKPTTKTKRGL'])
In[17]: arr.dtype
Out[17]: dtype('<U12')
注意:它适用于非英文字母。
【讨论】:
您可以使用numpy 的tostring() 方法作为:
>>> st = np.array(['K' 'R' 'K' 'P' 'T' 'T' 'K' 'T' 'K' 'R' 'G' 'L'])
>>> st.tostring()
'KRKPTTKTKRGL'
由于你有一个numpy 数组,这个方法会比join() 快。
对于 Python3x,tostring() 可以用作:
>>> st = np.array(['K','R','K','P','T','T','K','T','K','R','G','L'])
>>> st.astype('|S1').tostring().decode('utf-8')
'KRKPTTKTKRGL'
【讨论】:
np.array(['KRKPTTKTKRGL'])。我怀疑缺少逗号仅仅是因为 OP 所说的打印到文件中。有关详细信息,请参阅文档here。
如果您只有一个 numpy 数组,那么为什么不直接将其转换为字符串以写入您的文件呢?您可以使用str.join 执行此操作,它接受可迭代(列表、numpy 数组等)。
import numpy as np
arr = np.array(['K', 'R', 'K', 'P', 'T', 'T', 'K', 'T', 'K', 'R', 'G', 'L'])
s = ''.join(arr)
# KRKPTTKTKRGL
【讨论】:
"".join(['K' 'R' 'K' 'P' 'T' 'T' 'K' 'T' 'K' 'R' 'G' 'L'])
【讨论】:
如果使用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')
【讨论】: