比较两个不同大小的numpy数组的最佳方法

我有2个numpy array大小不同。从理论上讲,一个将是另一个的子集。我想在较大的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

任何建议将不胜感激:)

谢谢

as516344224 回答:比较两个不同大小的numpy数组的最佳方法

您可以使用np.in1d来检查匹配的索引,然后将获得一个布尔数组。

>>> np.in1d(A,B)
array([False,False,True,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)]

编辑:如评论中所述,这是一种引人注目的显眼方式(我错过了,上帝知道原因了!!)来获取索引:np.nonzero(np.in1d(A,B))

本文链接:https://www.f2er.com/3146336.html

大家都在问