我有一个包含字符串的矩阵,如下所示,
array([['', '', 'C'],
['A', '', 'C'],
['', 'B', '']], dtype='|S9')
我需要连接每行中的列以获得类似于以下内容的输出,
array([['C'],
['A C'],
['B']])
我需要应用这个的矩阵的大小非常大。是否有类似于 python 中的列总和的东西 np.sum(matrix, axis=0)
来执行此字符串连接?
最佳答案
np.tensordot
有一个利用字符串(不是字符串数据类型)的运算符重载的示例。以此为线索,我尝试了以下操作:
In [678]: arr = np.array([['', '', 'C'],
...: ['A', '', 'C'],
...: ['', 'B', '']], dtype='U3')
...:
我使用的是 py3,因此 U
提供了更清晰的显示。 U3
数据类型不实现“+”。但是将字符串数据类型转换为对象数据类型会创建一个真正的 Python 字符串数组:
In [679]: arrO=arr.astype(object)
In [681]: arrO
Out[681]:
array([['', '', 'C'],
['A', '', 'C'],
['', 'B', '']], dtype=object)
现在 sum
连接字符串,实际上是在执行 'A'+''+'C'
等:
In [682]: np.sum(arrO, axis=1)
Out[682]: array(['C', 'AC', 'B'], dtype=object)
np.char
有一些函数将字符串方法应用于字符串数据类型数组的元素。有一个 np.char.join ,但它按元素工作,而不是跨元素。
np.split
适用于数组元素,但它会生成列表:
In [690]: np.char.split(np.array(['A B C','D E F']))
Out[690]: array([list(['A', 'B', 'C']), list(['D', 'E', 'F'])], dtype=object)
可以用np.char.join
反转:
In [691]: np.char.join(',',_)
Out[691]: array(['A,B,C', 'D,E,F'], dtype='<U5')
In [699]: np.char.join('',Out[690])
Out[699]: array(['ABC', 'DEF'], dtype='<U3')
因此,如果 arr
可以转换为 np.array(list(['','','C']),,那么
.join
就可以工作。 .., dtype=object)
但在沿着这条路走得太远之前,我应该注意到 np.char
函数可能很方便,但它们并不比使用相同函数的列表推导式快得多(如果有的话)字符串方法。
关于python - 连接矩阵中的字符串python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49702042/