【问题标题】:Best way to compare two numpy array of different sizes [duplicate]比较两个不同大小的numpy数组的最佳方法[重复]
【发布时间】:2019-11-07 08:59:49
【问题描述】:

我有 2 个不同大小的 numpy arrays。从理论上讲,一个将是另一个的子集。我想在较大的numpy array 中找到其值与较小子集匹配的索引。

例如

A = [ 7.52   8.32  16.96  20.05 -24.96 -42.69 -47.47  55.04 -57.62   2.03
  61.94  64.41 -71.3   93.6  151.65 151.75  -0.43  -3.18   4.59  -5.55
   6.44  -9.48   9.31   0.67 -14.34  -8.09  16.23  17.69  19.46  23.52
 -52.59]

B = [61.94 16.23 19.46 -5.55 -0.43 93.6]

2 for 循环会执行此操作,但我想知道是否有 python 方法可以更快地执行此操作。

我尝试了一个循环,但它不起作用(我怀疑numpy.where 不适用于不同大小的数组)

    def get_index(self, lst_1, lst_2):
        tmp_list = list()
        for i in range(min(len(lst_1), len(lst_2))):
            if np.where(lst_2[i] == lst_1):
                tmp_list.append(i)

        return tmp_list

任何建议将不胜感激:)

谢谢

【问题讨论】:

    标签: python numpy


    【解决方案1】:

    您可以使用np.in1d 来检查哪些索引匹配,您将得到一个布尔数组。

    >>> np.in1d(A,B)
    array([False, False, False, False, False, False, False, False, False,
           False,  True, False, False,  True, False, False,  True, False,
           False,  True, False, False, False, False, False, False,  True,
           False,  True, False, False])
    

    然后您可以执行以下操作以获取实际索引:

    >>> np.arange(A.shape[0])[np.in1d(A,B)]
    array([10, 13, 16, 19, 26, 28])
    

    注意:这对大型数组执行得非常快,反之则很容易检查。 np.in1d(A,B,invert=True)np.arange(A.shape[0])[~np.in1d(A,B)]

    编辑:正如 cmets 中所建议的那样,一种非常明显的方式(我错过了,天知道为什么?!)获取索引:np.nonzero(np.in1d(A,B))

    【讨论】:

    • 获取索引的更紧凑的方法是np.nonzero(np.in1d(A, B))
    • @DanielF 是的。为什么我不这样做超出了我的能力范围!
    猜你喜欢
    • 1970-01-01
    • 2015-07-04
    • 2022-01-11
    • 2012-02-25
    • 2016-02-24
    • 2020-03-09
    • 2012-05-14
    • 1970-01-01
    相关资源
    最近更新 更多