如何高效查找浮点型NumPy二维数组行在另一数组中的索引
高效实现方案
利用你已经通过np.unique得到的结果,我们可以通过向量化操作直接生成目标数组,避免低效的逐行比较或循环,具体步骤如下:
建立唯一行与v的索引映射
因为v是通过对p_indices排序后从p中提取的行,我们需要先建立p_uniques(np.unique返回的唯一行)与v的索引对应关系:order = np.argsort(p_indices) # 生成p中每个元素对应的v的索引 v_index = np.argsort(order)[p_inverse]按v的行顺序收集p中的索引
通过排序和分割操作,一次性提取所有对应索引并按v的行顺序拼接:# 按v的索引排序p的索引,确保同一v行的索引集中在一起 sorted_j = np.argsort(v_index) # 计算每个v行对应的p中索引数量的累积和,用于分割 split_points = np.cumsum(p_counts[order]) # 分割并拼接得到最终结果 final_indices = np.concatenate(np.split(sorted_j, split_points)[:-1])
说明
- 整个过程完全基于
np.unique的输出结果,没有额外的数组比较操作,时间复杂度主要由排序决定,远低于np.where或np.isin的逐元素匹配。 final_indices的结构为:先列出v第0行在p中的所有索引,接着是v第1行的所有索引,以此类推,完全符合你需求中保留重复项的要求。
内容的提问来源于stack exchange,提问作者Ravi
相关产品推荐
相关产品推荐

