如何解决基于另一个数组列的Python numpy数组行提取-需要更快的解决方案
给出了两个 2D numpy 数组(arr_all 和 arr_sub),而第二个是第一个的随机子集。我需要根据两个数组中存在的一列中的 ID 获取第二个 (arr_sub) 中未包含的第一个 (arr_all) 的行。 例如:
arr_all = array([[ x,y,z,id_1],# [x,id_2],id_3],id_4],id_5]])
arr_sub = array([[ x,id_5]])
想要的输出:
arr_remain = array([[ x,id_4]])
list_remain = []
for i in range(len(ds_all)):
if ds_all[i][3] not in ds_trees[:,3]:
list_remain.append(ds_all[i])
arr_remain = np.array(list_remain)
不幸的是,这个解决方案只适用于小数据集,因为它的运行速度很慢。由于我的原始数据集包含超过 26 个 mio 行,这还不够。
我尝试采用 this、this 或 this 等解决方案,但我没有设法添加 ID 是否存在于其他数组列中的检查。
解决方法
这是一种方法:
arr_remain = arr_all[~np.in1d(arr_all[:,-1],arr_sub[:,-1])]
# or arr_remain = arr_all[~np.isin(arr_all[:,-1])]
输出:
array([['x','y','z','id_3'],['x','id_4']],dtype='<U4')
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。