python - 连接矩阵中的字符串python

标签 python numpy string-concatenation

我有一个包含字符串的矩阵,如下所示,

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/

相关文章:

python - 断言错误 : would build wheel with unsupported tag ('cp310' , 'cp310' 'linux_x86_64' )

python - 如何将数字附加到 Racket 中的字符串?

使用 Terraform 中的变量关闭 Azure VM

python - 用于查找大于原始字符串的字符串的字符串操作算法

python - Cython 内存 View : wrapping c function with array parameter to pass numpy array

Python 3 : RuntimeWarning with numpy. 电源

php - 使用连接创建字符串时在数据库行之间添加逗号

python - blender 脚本 : how to write to text object

python - 对列表中的奇数进行排序

python - 如何使用 OpenCV-Python 检测照片上的黑色形状轮廓