我试图使用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。
答案 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])
。