ano*_*ell 9 python arrays numpy
我有一个给定的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))
Run Code Online (Sandbox Code Playgroud)
做一些事情,结果应该是
array([0, 1, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14])
Run Code Online (Sandbox Code Playgroud)
数组可以是几十万个,切片对象列表可以包含几千个元素,我需要经常运行操作,所以速度有点重要.
就我所见,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)))
Run Code Online (Sandbox Code Playgroud)
请注意,np.hstack()
用于获取包含将被删除的所有索引的单个数组。这大约需要@HYRY 解决方案时间的一半。