9

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

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

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

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

4

3 回答 3

13

列表理解是最“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')

没有循环,没有列表理解,甚至没有副本。缓冲区只是以不同的“视图”保持不变,因此这是可用的最快解决方案。

于 2012-06-11T17:37:24.057 回答
3

尝试列表理解:

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

这只是你for重写的循环。

于 2012-06-11T17:10:11.830 回答
2
[row.tostring() for row in data]
于 2012-06-11T19:00:09.073 回答