首页 > 解决方案 > “撤消”numpy.delete,numpy.insert?

问题描述

我有 numpy 数组,我想删除少量条目。之后,我想将以前的索引插入它们所属的位置。numpy.insert 不能解决问题:

import numpy

a = numpy.random.rand(7)
idx = [5, 0]

# delete some indices
b = numpy.delete(a, idx)

# magic
b /= 1.0

# insert back?
c = numpy.insert(b, idx, a[idx])

# nope :(
assert numpy.all(numpy.abs(a - c) < 1.0e-10)

有什么提示吗?(最好是简单的答案。)

也许有比首先使用删除更好的解决方案,例如,通过切片等。

标签: pythonarraysnumpy

解决方案


这是一种方法array-assignment-

out = np.empty(len(b) + len(idx), dtype=b.dtype)
out[idx] = vals
out[np.isin(np.arange(len(out)), idx, invert=True)] = b

另一种方法涉及一些排序 -

sidx = idx.argsort()
out = np.insert(b, idx[sidx] - np.arange(len(idx)), vals[sidx])

请注意,解决方案假定输入是数组。


推荐阅读