numpy split对float数组不起作用

时间:2016-01-27 22:11:59

标签: python numpy

我试图使用numpy split将float数组拆分为子数组,但结果不正确:

import numpy as np
x = np.array([1.2, 1.3, 1.5, 2, 2.1, 2.5])
np.split(x, [1, 2, 3])

Out[127]: [array([ 1.2]), array([ 1.3]), array([ 1.5]), array([ 2. ,  2.1,  2.5])]

1.2,1.3和1.5应该放在一个子数组中但是它们是分开的,而它似乎正确地分割了2,2.1和2.5。

3 个答案:

答案 0 :(得分:2)

引自docs

  

numpy.split(ary,indices_or_sections,axis = 0)

     

indices_or_sections:int或1-D数组如果indices_or_sections是   整数,N,该数组将沿轴分为N个相等的数组。   如果无法进行此类拆分,则会引发错误。如果   indices_or_sections是排序整数的一维数组,即条目   指示阵列沿轴的分割位置。例如,[2,3]   对于轴= 0,会导致ary [:2] ary [2:3] ary [3:]如果是一个索引   超过沿轴的阵列尺寸,空子阵列是   相应地回来了。

因此,如果要在轴上拆分第三个元素,则需要执行以下操作:

In [1]: import numpy as np
In [2]: x = np.array([1.2, 1.3, 1.5, 2, 2.1, 2.5])

In[3]: np.split(x, [3])
Out[3]: [array([ 1.2,  1.3,  1.5]), array([ 2. ,  2.1,  2.5])]

如果您希望将数组x拆分为两个相同的子数组:

In [4]: np.split(x, 2)
Out[4]: [array([ 1.2,  1.3,  1.5]), array([ 2. ,  2.1,  2.5])]

答案 1 :(得分:2)

我想你想把数组分成小于1,1到2,2到3和大于3(4个bin)的元素。如果我们假设数组已排序,则以下内容将起作用:

>>> x = np.array([0.4, 1.2, 1.3, 1.5, 2, 2.1, 2.5, 3.4])
>>> np.split(x, np.bincount(np.digitize(x, [1, 2, 3])).cumsum())[:-1]
[array([ 0.4]),
 array([ 1.2,  1.3,  1.5]),
 array([ 2. ,  2.1,  2.5]),
 array([ 3.4])]

使用np.digitize,我们得到每个数组元素的bin的索引。使用np.bincount,我们可以获得每个bin中的元素数量。使用np.cumsum,我们可以获取已排序数组中每个bin的拆分索引。最后,我们有np.split需要的内容。

答案 2 :(得分:1)

np.split(x, [1, 2, 3])为您提供x[:1], x[1:2], x[3:],这显然不是您想要的。看来你想要的是np.split(x, [3])