问题描述
给出了两个 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')