numpy 从np中删除数组,split()数组结果

68de4m5k  于 2023-08-05  发布在  其他
关注(0)|答案(2)|浏览(109)

我正在尝试使用np.split()删除数组的特定部分。
我试图使用一个更复杂的循环来删除部分,因为分割部分的数量不是恒定的,并且经常变化。
我有一个连续数字的数组,一个有序切割位置的数组,以及需要删除哪些切割位置的知识。
前任

a = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]
cut_array = [3,6,10,13]

字符串
所需输出。

result = [[1,2,3],[7,8,9,10],[14,15]]


因此,我们的想法是删除cut_array中每组2个元素之间的数组部分。
编辑:切割数组的位置可能在起始数组的开始或结束

tf7tbtn2

tf7tbtn21#

使用np.split和切片:

a = np.array([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15])
res = np.split(a, cut_array))[::2]

个字符

wmvff8tz

wmvff8tz2#

从列表中剪切子列表的明显方法是:

In [299]: alist = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]; cuts = [3,6,10,13]
In [300]: [alist[:3],alist[6:10],alist[13:]]
Out[300]: [[1, 2, 3], [7, 8, 9, 10], [14, 15]]

字符串
要对可变大小的cuts执行此操作,首先根据需要填充该列表以处理结束切片:

In [301]: cuts = [None,*cuts,None]
In [302]: cuts
Out[302]: [None, 3, 6, 10, 13, None]


然后使用列表解析,zip,使用连续对:

In [303]: [alist[i:j] for i,j in zip(cuts[::2],cuts[1::2])]
Out[303]: [[1, 2, 3], [7, 8, 9, 10], [14, 15]]


np.split迭代其切割,返回数组切片列表。因此,避免列表或列表理解对速度没有好处。
从数组工作:

In [304]: arr= np.array(alist)
In [305]: [arr[i:j] for i,j in zip(cuts[::2],cuts[1::2])]
Out[305]: [array([1, 2, 3]), array([ 7,  8,  9, 10]), array([14, 15])]


或者,进行所有切割,并选择每隔一个(如另一个具有拆分的答案所示):

In [306]: [alist[cuts[i]:cuts[i+1]] for i in range(len(cuts)-1)]
Out[306]: [[1, 2, 3], [4, 5, 6], [7, 8, 9, 10], [11, 12, 13], [14, 15]]
In [307]: [alist[cuts[i]:cuts[i+1]] for i in range(len(cuts)-1)][::2]
Out[307]: [[1, 2, 3], [7, 8, 9, 10], [14, 15]]

相关问题