【问题标题】:Turn NumPy Array of characters into a string将 NumPy 字符数组转换为字符串
【发布时间】:2014-12-19 18:53:49
【问题描述】:

我有一个 numpy 字符数组,当我将它写入文件时,它会写成:

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

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

KRKPTTKTKRGL 

我查看了 numpy 文档,根据我收集到的信息,解决方案是一个 chararray,但它看起来不像普通数组那样实用。

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

【问题讨论】:

    标签: python arrays numpy chars


    【解决方案1】:

    以一种 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')
    

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

    【讨论】:

      【解决方案2】:

      您可以使用numpytostring() 方法作为:

      >>> 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' 
      

      【讨论】:

      • 在 Python 3(不知道 2)中,这会创建一个字节对象,而不是字符串。请注意,OP 的数组可能会在定义中包含逗号,否则它实际上是np.array(['KRKPTTKTKRGL'])。我怀疑缺少逗号仅仅是因为 OP 所说的打印到文件中。有关详细信息,请参阅文档here
      • 我使用的是 Python 2,这种方法效果很好。它完全符合我的要求。谢谢!
      • 请注意,自 numpy 版本 1.19.0 以来,不推荐使用 tostring(),tobytes() 也是如此(它总是返回一个字节对象)
      【解决方案3】:

      如果您只有一个 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
      

      【讨论】:

      • 如果你能解释反对意见,我很乐意编辑我的答案。
      【解决方案4】:
      "".join(['K' 'R' 'K' 'P' 'T' 'T' 'K' 'T' 'K' 'R' 'G' 'L'])
      

      【讨论】:

        【解决方案5】:

        如果使用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')
        

        【讨论】:

          猜你喜欢
          • 2016-03-10
          • 2013-05-05
          • 2021-04-26
          • 2015-03-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-03-24
          • 2019-11-24
          相关资源
          最近更新 更多