Элементарная конкатенация строк в numpy
Это ошибка?
import numpy as np
a1=np.array(['a','b'])
a2=np.array(['E','F'])
In [20]: add(a1,a2)
Out[20]: NotImplemented
Я пытаюсь выполнить элементную конкатенацию строк. Я думал, что Add() - это способ сделать это в numpy, но, очевидно, он работает не так, как ожидалось.
Ответы
Ответ 1
Это можно сделать, используя 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')
Существуют и другие полезные операции string > , доступные для типов данных NumPy.
Ответ 2
Вы можете использовать подкласс chararray
для выполнения операций со строками:
a1 = np.char.array(['a', 'b'])
a2 = np.char.array(['E', 'F'])
a1 + a2
#chararray(['aE', 'bF'], dtype='|S2')
еще один приятный пример:
b = np.array([2, 4])
a1*b
#chararray(['aa', 'bbbb'], dtype='|S4')
Ответ 3
Это может (и должно) быть сделано в чистом Python, так как numpy
также использует внутренние функции управления строкой Python:
>>> a1 = ['a','b']
>>> a2 = ['E','F']
>>> map(''.join, zip(a1, a2))
['aE', 'bF']
Ответ 4
Другим решением является преобразование массивов строк в массивы 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)
Это не так медленно (менее чем вдвое медленнее, чем добавление целочисленных массивов).