python - “撤消”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)
有什么提示吗?(最好是简单的答案。)
也许有比首先使用删除更好的解决方案,例如,通过切片等。
解决方案
这是一种方法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])
请注意,解决方案假定输入是数组。
推荐阅读
- reactjs - 如何让这个组件加载编辑页面组件
- javascript - 在javascript变量上调用jquery方法不起作用
- github - 尝试安装 yaireo/Tagify 时出现致命错误
- sql - 使用 Map[Int, Int] 的列查询 SQL
- spring - 如何将自定义 HttpMessageConveter 注入 Spring WebFlux 测试
- php - 使用 imap_open 检索 Outlook 365 已发送文件夹
- python - 如何从 3d 张量向每个 2d 张量添加 2d 张量
- mercurial - Mercurial:由于解析错误,无法编辑配置文件
- javascript - 带有 pouchdb 事件处理程序的 await 的语法是什么?
- javascript - Vuetify 中 v-checkbox 元素过大的问题