gpt4 book ai didi

python - 从 numpy 数组中删除多个切片

转载 作者:太空狗 更新时间:2023-10-29 21:08:38 24 4
gpt4 key购买 nike

我有一个给定的 numpy 数组和一个包含多个切片对象的列表(或者包含 (start, end) 元组)。我希望从原始数组中删除切片对象位置,并获得具有剩余值的第二个数组。

玩具示例:

myarray = np.arange(20)

array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
17, 18, 19])

mylist=(slice(2,4),slice(15,19))

做某事,结果应该是

array([0, 1, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14])

数组可以是几十万大,切片对象列表可以包含几千个元素,我需要经常运行操作,所以速度有点重要。

据我所知,Numpy delete 没有采用切片列表?

现在我正在生成我的切片对象列表的补码并对其进行切片,但是生成补码是一个有点尴尬的过程,我对我的切片列表进行排序然后遍历它,根据需要创建补码切片对象。我希望有一种我没有想到的更优雅的方式!

最佳答案

您可以使用 set() 来确定哪些位置将被保留,并使用 np.take() 来获取相应的值,执行如下操作:

ind = np.indices(myarray.shape)[0]
rm = np.hstack([ind[i] for i in mylist])

ans = np.take(myarray, sorted(set(ind)-set(rm)))

请注意,np.hstack() 用于获取包含所有将被删除的索引的单个数组。这大约需要@HYRY 解决方案一半的时间。

关于python - 从 numpy 数组中删除多个切片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24641731/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com