我有一個二維numpy字符串數組。有沒有辦法連接每一行中的字符串,然後將結果字符串與分隔符字符串進行連接,例如一個換行符?沿軸線連接numpy字符串數組?
例子:
pic = np.array([ 'H','e','l','l','o','W','o','r','l','d']).reshape(2,5)
我想:
"Hello\nWorld\n"
我有一個二維numpy字符串數組。有沒有辦法連接每一行中的字符串,然後將結果字符串與分隔符字符串進行連接,例如一個換行符?沿軸線連接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'
您在那裏有正確的想法。這裏有一個vectorized NumPythonic
執行試圖沿着這些思路去 -
# 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''重要? 'join'的通常用法是在字符串之間放置分隔符,但不是最後。 – hpaulj
這並不重要 - 我可以隨時添加它。 – ErikR