代码之家  ›  专栏  ›  技术社区  ›  Luca

基于字典存在性的numpy数组过滤

  •  1
  • Luca  · 技术社区  · 8 年前

    我有一个如下的日程安排:

    import numpy as np
    x = np.array([[1, 2, 1], [4, 5, 7], [3, 2, 3]])
    

    我有一本字典,里面有一些类ID,如下所示:

    k = {1: None, 2: None, 3: None}
    

    现在,numpy数组的最后一列保存类id。所以我想做的是根据类id是否存在于字典中来过滤numpy数组。所以,对输入数组进行过滤,将第一行和第三行作为 7 不在字典里。

    所以我得到的类列为:

    cls = x[:, -1]
    

    现在,我被困在如何使用这个来过滤 x 数组,而不在此循环并创建另一个数组。

    2 回复  |  直到 8 年前
        1
  •  2
  •   jpp    8 年前

    这是一种方法 numpy.in1d :

    keys = list(k.keys())
    res = x[np.in1d(x[:, -1], keys)]
    
    print(res)
    
    [[1 2 1]
     [3 2 3]]
    
        2
  •  1
  •   Simeon Ikudabo    8 年前

    我会做一些事情,比如:

    import numpy as np
    x = np.array([[1, 2, 1], [4, 5, 7], [3, 2, 3]])
    k = {1: None, 2: None, 3: None}
    classes = [i for i in x[:,-1] if i in k.keys()]
    classes = np.array(classes)
    print(classes)
    

    这应该返回1和3,而不是7,因为我们只查找x中的最后一行数据值。这将返回k中的值列表,如果您选择,可以将其形成数组。