Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将索引重新对齐到已更改的python集合_Python - Fatal编程技术网

将索引重新对齐到已更改的python集合

将索引重新对齐到已更改的python集合,python,Python,我有一组数据和一个变量,其中包含一些数据的索引。 对数据应用过滤操作,以消除数据的子集。 我希望移动索引,以便它们引用更新的数据集合(删除已删除实例的索引) 我正在下面的函数中使用实现。我还发布了我用来验证它是否有效的代码。 有没有一种快速的方法可以通过核心库重新调整索引,或者有一种更好的方法 随机导入 def align_索引(需要idx,掩码): """ 函数在删除后将一组索引与集合对齐, 用面具表示 论据: 想要\u idx:删除前所需整数索引的列表 掩码:二进制掩码,其中1表示删除后仍然

我有一组数据和一个变量,其中包含一些数据的索引。 对数据应用过滤操作,以消除数据的子集。 我希望移动索引,以便它们引用更新的数据集合(删除已删除实例的索引)

我正在下面的函数中使用实现。我还发布了我用来验证它是否有效的代码。 有没有一种快速的方法可以通过核心库重新调整索引,或者有一种更好的方法

随机导入
def align_索引(需要idx,掩码):
"""
函数在删除后将一组索引与集合对齐,
用面具表示
论据:
想要\u idx:删除前所需整数索引的列表
掩码:二进制掩码,其中1表示删除后仍然存在的元素
返回:
删除后(幸存)所需元素的整数索引列表
"""
#重建索引:删除悬挂
new_idx=[idx for(i,idx)in enumerate(通缉_idx)if mask[idx]]
#删除标记
not_mask=[int(非m)表示mask中的m]
#累积删除区域
重新调整的_idx=[k-sum(非_掩码[:k+1]),用于新的_idx中的k]
返回重新对齐的\u idx
#资料
数据=[random.randint(0500)表示范围(1000)]
rng=列表(范围(长度(数据)))
对于范围(1000)内的:
#随机数据删除/请求
通缉犯_idx=random.sample(rng,random.randint(5100))
del_index=random.sample(rng,random.randint(5100))
#应用删除
掩码=[int(i不在delu索引中)表示i在范围内(len(数据))]
过滤的_数据=[枚举(掩码)中(i,m)的数据[i],如果m]
重新对齐的索引=对齐的索引(需要idx,掩码)
#核实
new_idx=[idx for(i,idx)in enumerate(通缉_idx)if mask[idx]]
l1=[新_idx中k的数据[k]
l2=[重新对齐的_索引中k的过滤_数据[k]
断言l1==l2

如果您使用numpy,它非常简单:

import numpy as np

mask = np.array(mask, dtype=np.bool)
new_idx = np.cumsum(mask, dtype=np.int64)
new_idx[mask] = -1
除非删除更多元素,否则不需要重新计算
new\u idx

然后,只需查看
new\u idx[i]
即可获得旧索引
i
的重新映射索引。或一次完成整个阵列:

wanted_idx = np.array(wanted_idx, dtype=np.int64)
remapped_idx = new_idx[wanted_idx]
请注意,删除的索引将获得赋值
-1
。如果需要,您可以过滤掉这些内容:

remapped_idx = remapped_idx[remapped_idx >= 0]

如果您使用numpy,它非常简单:

import numpy as np

mask = np.array(mask, dtype=np.bool)
new_idx = np.cumsum(mask, dtype=np.int64)
new_idx[mask] = -1
除非删除更多元素,否则不需要重新计算
new\u idx

然后,只需查看
new\u idx[i]
即可获得旧索引
i
的重新映射索引。或一次完成整个阵列:

wanted_idx = np.array(wanted_idx, dtype=np.int64)
remapped_idx = new_idx[wanted_idx]
请注意,删除的索引将获得赋值
-1
。如果需要,您可以过滤掉这些内容:

remapped_idx = remapped_idx[remapped_idx >= 0]

现在还不完全清楚你想要实现什么,或者为什么。但是代码中肯定有一些错误,不管是什么。例如,您似乎将
k
既用作“索引”的值,也用作掩码的索引,这似乎毫无意义。你能提供一个输入数据和预期输出(以及你得到的结果)的样本吗?你想要实现什么或者为什么还不完全清楚。但是代码中肯定有一些错误,不管是什么。例如,您似乎将
k
既用作“索引”的值,也用作掩码的索引,这似乎毫无意义。您能否提供输入数据和预期输出的示例(以及您得到的结果)?