You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何高效查找浮点型NumPy二维数组行在另一数组中的索引

高效实现方案

利用你已经通过np.unique得到的结果,我们可以通过向量化操作直接生成目标数组,避免低效的逐行比较或循环,具体步骤如下:

  1. 建立唯一行与v的索引映射
    因为v是通过对p_indices排序后从p中提取的行,我们需要先建立p_uniques(np.unique返回的唯一行)与v的索引对应关系:

    order = np.argsort(p_indices)
    # 生成p中每个元素对应的v的索引
    v_index = np.argsort(order)[p_inverse]
    
  2. 按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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 14:35:45