2012-06-11 35 views
7

私は実際に文字列のリストを表す2D numpy char配列(NetCDF4ファイルから)を持っています。私はそれを文字列のリストに変換したい。文字列に文字を連結するために、私は一度にこの1つの文字列を実行する方法を見つけることができnumpy文字列から文字列へ

私は(結合を使用することができます知っている):

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

しかし、それは非常に遅いです。 1つのコマンドで文字列の配列を返すにはどうすればよいですか?ちょうどあなたのforループ書き換えられ

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

:ありがとう

+3

なぜあなたのforループに 'data'をコピーしていますか? –

答えて

3

はリスト内包してみてください。

+1

+1。もう一つの方法は 'map( ''。join、data)'です。 –

+0

@DavidRobinsonそれは考えていない - 非常に良い。 – Chris

+0

素晴らしい答え。どうもありがとう! – AdrianR

11

リストの理解は、最も「ピジョンソニックな」方法です。

最も "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') 

ないルーピング、何のリスト内包ではなく、さらにコピー。バッファーは変更されずに別の "ビュー"に置かれるので、これは利用可能な最速のソリューションです。

+1

重要な注意点は、配列がメモリ内で*連続していなければならないことです。そうでなければ、ビューは失敗します。 'data = np.ascontiguousarray(data)'を使ってこれを保証することができます。 – shoyer

関連する問題