在numpy字符串数组上执行逐元素操作

时间:2016-03-15 08:40:27

标签: python arrays numpy vectorization

说我有一个类似于io = np.asarray(['hello world','hello Graz', 'hello all'])的numpy数组。现在它的形状是io.shape (3,)。我想对每个元素执行拆分。我知道这有效splituf = lambda i: np.asarray([item.split(" ",1) for item in i])。因为现实应用程序将在更大的数组上,我想避免for循环并使用向量化操作。

有什么想法吗?

非常感谢

3 个答案:

答案 0 :(得分:0)

您可以使用pandas库。它构建使用numpy,提供丰富的文档和精彩的操作,如数据透视,图形,元素操作,......很多

注意:pandas不是numpy的替代品。

Pandas element wise operation

以下是元素操作的一个特例

>>> sam = np.arange(15)
>>> print sam
[ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14]

>>> print pd.rolling_apply(sam, 2, lambda x: x[1] - x[0])
[ nan   1.   1.   1.   1.   1.   1.   1.   1.   1.   1.   1.   1.   1.   1.]

答案 1 :(得分:0)

有一个集合nu py函数,它将Python str操作应用于数组的元素

http://docs.scipy.org/doc/numpy/reference/routines.char.html

这包括np.char.split

在我有限的经验中,这些并不比列表理解快得多,因为它们仍然调用Python函数,而不是快速编译numpy c code. If the split occurs at the same point in each string , eg a [:5],[5:]` ,我们或许可以做一些dtype转换。

结果将是2d,对吧?

答案 2 :(得分:0)

您可以使用join和re.split

import numpy as np
import re

io = np.asarray(['hello world','hello Graz', 'hello all'])
print(re.split('[ -]', '-'.join(io)))
相关问题