2016-03-15 76 views
0

说我有一个像这样的numpy数组。现在它的形状是io.shape (3,)。我想对每个元素执行拆分。我知道这个作品splituf = lambda i: np.asarray([item.split(" ",1) for item in i])。因为现实生活中的应用程序将在更大的数组上,所以我想避免使用for循环并使用矢量化操作。在numpy字符串数组上执行按元素操作

任何想法?

非常感谢

回答

0

您可以使用熊猫库。这是建立使用numpy,提供丰富的文档和精巧的操作,如枢轴,图形,元素明智的操作,...很多人

注意:熊猫不是替代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.] 
0

有适用Python的str操作数组

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

的elemets集合NU PY功能

这包括一个np.char.split

在我有限的经验,这些都不是显著比列表理解得更快,因为他们还是叫Python的功能,还不快编译numpyÇcode. If the split occurs at the same point in each string , eg一个[5],A [5:]`,我们也许能够做的一些dtype转换。

结果将是2d,对不对?

+0

谢谢, 不幸的是,拆分不是在同一个油漆,它将在第一个空白。因此,是的,结果将是2D:第一列包含每行的第一个字,第二列包含每行的剩余字。我已经将lambda函数与np.char.split进行了比较,第二个更快。这实际上不是一个庞大的C代码,但确实删除了我的lambda中的for循环。不过,我仍然认为这一定是一种颠簸的方式。 – user6065249

+0

数组数据缓冲区由字节组成,按dtype字符串大小分组。但是每个字符串的分割点会有所不同。这意味着每个段的字节数将有所不同。如此快速的numpy操作(如重塑或改变步伐)将不起作用。你可以编写你的获得的cython代码来遍历缓冲区。但这不是一种常见的颠簸操作。 – hpaulj