【问题标题】:numpy array of chars to stringnumpy 字符数组到字符串
【发布时间】:2012-06-14 14:46:50
【问题描述】:

我有一个 2D numpy char 数组(来自 NetCDF4 文件),它实际上代表一个字符串列表。我想把它转换成一个字符串列表。

我知道我可以使用 join() 将字符连接成一个字符串,但我只能找到一种方法一次处理一个字符串:

data = np.array([['a','b'],['c','d']])
for row in data[:]:
    print ''.join(row)

但是速度很慢。如何在单个命令中返回字符串数组?谢谢

【问题讨论】:

  • 为什么要在 for 循环中复制 data

标签: python arrays string numpy char


【解决方案1】:
[row.tostring() for row in data]

【讨论】:

    【解决方案2】:

    列表推导是最“pythonic”的方式。

    最“numpythonic”的方式是:

    >>> data = np.array([['a','b'],['c','d']])
    # a 2D view
    >>> data.view('S2')
    array([['ab'],
           ['cd']], 
          dtype='|S2')
    # or maybe a 1D view ...fastest solution:
    >>> data.view('S2').ravel()
    array(['ab', 'cd'], 
          dtype='|S2')
    

    没有循环,没有列表理解,甚至没有副本。缓冲区只是以不同的“视图”原封不动地坐在那里,因此这是最快的解决方案。

    【讨论】:

    • 一个重要的警告是数组在内存中必须是连续的——否则视图会失败。您可以使用data = np.ascontiguousarray(data) 来确保这一点。
    【解决方案3】:

    尝试列表理解:

    >> s = [''.join(row) for row in data]
    >> s
    ['ab', 'cd']
    

    这只是你的 for 循环重写。

    【讨论】:

    • @DavidRobinson 没想到 - 非常好。
    • @AdrianR- 如果他回答了您的问题,请不要忘记接受他的回答(点击绿色复选标记)。
    猜你喜欢
    • 2022-01-22
    • 1970-01-01
    • 2022-11-25
    • 2016-03-10
    • 1970-01-01
    • 2013-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多