numpy中的元素字符串连接

Dav*_*415 27 python arrays string numpy elementwise-operations

这是一个错误吗?

import numpy as np
a1=np.array(['a','b'])
a2=np.array(['E','F'])

In [20]: add(a1,a2)
Out[20]: NotImplemented
Run Code Online (Sandbox Code Playgroud)

我正在尝试按元素进行字符串连接.我认为Add()是在numpy中实现它的方法,但显然它没有按预期工作.

Mik*_*e T 52

这可以使用numpy.core.defchararray.add完成.这是一个例子:

>>> import numpy as np
>>> a1 = np.array(['a', 'b'])
>>> a2 = np.array(['E', 'F'])
>>> np.core.defchararray.add(a1, a2)
array(['aE', 'bF'], 
      dtype='<U2')
Run Code Online (Sandbox Code Playgroud)

NumPy数据类型还有其他有用的字符串操作.

  • 如模块的docstring中所述,"defchararray`的首选别名是`numpy.char`",所以你可以说`np.char.add`. (2认同)

Sau*_*tro 11

您可以使用chararray子类对字符串执行数组操作:

a1 = np.char.array(['a', 'b'])
a2 = np.char.array(['E', 'F'])

a1 + a2
#chararray(['aE', 'bF'], dtype='|S2')
Run Code Online (Sandbox Code Playgroud)

另一个好例子:

b = np.array([2, 4])
a1*b
#chararray(['aa', 'bbbb'], dtype='|S4')
Run Code Online (Sandbox Code Playgroud)

  • 从文档中,“不推荐用于新开发项目” _ (2认同)

Nik*_* B. 6

这可以(并且应该)在纯Python中完成,因为numpy内部也使用Python字符串操作函数:

>>> a1 = ['a','b']
>>> a2 = ['E','F']
>>> map(''.join, zip(a1, a2))
['aE', 'bF']
Run Code Online (Sandbox Code Playgroud)

  • 这不回答这个问题.有时人们可能想要在numpy中执行此操作,例如在处理大型字符串数组时.原始海报给出了一个简单的例子,其中一个人会使用纯Python,但是要求一个numpy解决方案. (7认同)
  • 这似乎只是返回一个地图对象,而不是一个列表 (2认同)

jon*_*her 5

另一个解决方案是将字符串数组转换为 python 对象数组,以便调用 str.add :

>>> import numpy as np
>>> a = np.array(['a', 'b', 'c', 'd'], dtype=np.object)   
>>> print a+a
array(['aa', 'bb', 'cc', 'dd'], dtype=object)
Run Code Online (Sandbox Code Playgroud)

这并没有那么慢(比添加整数数组慢不到两倍)。