2015-09-18 23 views
7

私は文字列の2次元配列を持っています。各行の文字列を連結し、結果の文字列を区切り文字列で結合する方法はありますか?改行?numpy文字列を軸に沿って連結しますか?

例:

pic = np.array([ 'H','e','l','l','o','W','o','r','l','d']).reshape(2,5) 

私が取得したい:

"Hello\nWorld\n" 
+0

は最終的なもので、 '\ n''ここではこれらのアイデアに沿って行くことにしようvectorized NumPythonic実装です重要?通常、 'join'を使うと、区切り文字は文字列の間に置かれますが、最後には置かれません。 – hpaulj

+0

それは重要ではありません。後でいつでも追加できます。 – ErikR

答えて

7

numpyのの外を行うことは難しいことではありません。

>>> import numpy as np 
>>> pic = np.array([ 'H','e','l','l','o','W','o','r','l','d']).reshape(2,5) 
>>> pic 
array([['H', 'e', 'l', 'l', 'o'], 
     ['W', 'o', 'r', 'l', 'd']], 
     dtype='|S1') 
>>> '\n'.join([''.join(row) for row in pic]) 
'Hello\nWorld' 

np.core.defchararrayモジュールもあります文字配列を扱うための "おいしさ"がある - しかし、これらは単にpythonの組み込み関数と標準ライブラリ関数を包むラッパーであるため、おそらくそれらを使って実際のスピードアップを得ることはできません。

2

一つの方法は、たとえば、str.join()とリスト内包表記を使用することです -

In [1]: import numpy as np 

In [2]: pic = np.array([ 'H','e','l','l','o','W','o','r','l','d']).reshape(2,5) 

In [3]: pic 
Out[3]: 
array([['H', 'e', 'l', 'l', 'o'], 
     ['W', 'o', 'r', 'l', 'd']], 
     dtype='<U1') 

In [4]: '\n'.join([''.join(x) for x in pic]) 
Out[4]: 'Hello\nWorld' 

あなたが本当に最後に\nが必要な場合、あなたは番目の文字列を接合した後、それを連結することができます。例 -

In [5]: '\n'.join([''.join(x) for x in pic]) + '\n' 
Out[5]: 'Hello\nWorld\n' 
7

あなたには正しい考えがありました。

# Create a separator string of the same rows as input array 
separator_str = np.repeat(['\n'], pic.shape[0])[:,None] 

# Concatenate these two and convert to string for final output 
out = np.concatenate((pic,separator_str),axis=1).tostring() 

それともnp.column_stackとワンライナー - -

np.column_stack((pic,np.repeat(['\n'], pic.shape[0])[:,None])).tostring() 

サンプル実行 -

In [123]: pic 
Out[123]: 
array([['H', 'e', 'l', 'l', 'o'], 
     ['W', 'o', 'r', 'l', 'd']], 
     dtype='|S1') 

In [124]: np.column_stack((pic,np.repeat(['\n'], pic.shape[0])[:,None])).tostring() 
Out[124]: 'Hello\nWorld\n' 
+0

これは非常に興味深いです。 – ErikR

+0

@ user5402うん!純粋に愚かな解決策があるとは思っていませんでしたが、最終的にはうまくいったのです! :) – Divakar

+0

面白いです。私はそれを試してみるのは少し怠惰ですが、タイミングが他の(非numpy)ソリューションとどのように比較するのだろうかと思います。 – mgilson

関連する問題