繁体   English   中英

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

[英]Perform element-wise operation on numpy string array

说我有一个像这样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 循环并使用矢量化操作。

有什么想法吗?

非常感谢

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

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

熊猫元素明智的操作

这是元素智能操作的一种特殊情况

>>> 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.]

有一个集合 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 code. If the split occurs at the same point in each string , eg a[:5],a[5:]`,我们可能可以进行一些 dtype 转换。

结果将是2d,对吗?

您可以使用 join 和 re.split

import numpy as np
import re

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM