私は文字列の2次元配列を持っています。各行の文字列を連結し、結果の文字列を区切り文字列で結合する方法はありますか?改行?numpy文字列を軸に沿って連結しますか?
例:
pic = np.array([ 'H','e','l','l','o','W','o','r','l','d']).reshape(2,5)
私が取得したい:
"Hello\nWorld\n"
私は文字列の2次元配列を持っています。各行の文字列を連結し、結果の文字列を区切り文字列で結合する方法はありますか?改行?numpy文字列を軸に沿って連結しますか?
例:
pic = np.array([ 'H','e','l','l','o','W','o','r','l','d']).reshape(2,5)
私が取得したい:
"Hello\nWorld\n"
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の組み込み関数と標準ライブラリ関数を包むラッパーであるため、おそらくそれらを使って実際のスピードアップを得ることはできません。
一つの方法は、たとえば、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'
あなたには正しい考えがありました。
# 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'
は最終的なもので、 '\ n''ここではこれらのアイデアに沿って行くことにしよう
vectorized NumPythonic
実装です重要?通常、 'join'を使うと、区切り文字は文字列の間に置かれますが、最後には置かれません。 – hpauljそれは重要ではありません。後でいつでも追加できます。 – ErikR