如何使用np.where和np.in1d

时间:2019-08-06 10:23:43

标签: python arrays numpy

我有两个数组A和B。

A is [ 1 , 2 , 3].
B is [ 6 , 3 , 2, 8, 9, 1].

我知道A的每个元素都在B中。所以,如果我这样做

np.in1d(B, A)

我应该找回大小为B的True / False数组,它在每个元素为A的索引处都是True是吗?

现在,我希望B的元素的索引为True。所以我这样做:

np.where(np.in1d(B,A))

这应该返回与A完全相同的大小。

返回:(array([1, 2, 5]),)

因此这意味着B [1],B [2],B [5]为True。

因此它适用于这种简单的情况。

现在让我们移至我的数据。

我有2个浮点数组。

all_points3Dids of shape (102981,)
keypoints_points3Dids of shape(7934,)

现在我知道keypoints_points3Dids中的每个点都在all_points3Dids中。我怎么知道的?

由于此循环:

count = 0
for i in range(len(keypoints_points3Dids)):
    for k in range(len(all_points3Dids)):
        if(keypoints_points3Dids[i] == all_points3Dids[k]):
            count = count + 1
            print str(keypoints_points3Dids[i]) + " = " + str(all_points3Dids[k])

返回count = 7934

现在,让我们用numpy重复与AB相同的过程。

np.in1d(all_points3Dids , keypoints_points3Dids)

我应该找回大小为all_points3Dids的True / False数组,它在每个元素为keypoints_points3Dids是的索引处都是True吗?

不,我不知道。

如果我运行此np.where(np.in1d(all_points3Dids, keypoints_points3Dids))

我得到的数组大小为(1, 7831) ...

我缺少103个元素。

这里有帮助吗?

0 个答案:

没有答案