Python 如何逐行比较numpy中另一个矩阵的每一行的存在性?

Python 如何逐行比较numpy中另一个矩阵的每一行的存在性?,python,numpy,matrix,Python,Numpy,Matrix,我有两个矩阵,第一个更大(大约400k个条目),另一个1k 两者都是nx3(行x列),存储3D点(没有重复条目) 为了举例说明,我可以将它们声明为(将numpy导入为np,任意值): 及 直截了当地说,我想要这个输出: >>array([False,True,False,False,True]) 我只是想知道a中的哪些行是b行,而不是b行是哪一行或其他更复杂的行。所以有一种原生的numpy(某种“np.compare_rowwise(b,a)”)方法可以做到这一点 目前我正在使用f

我有两个矩阵,第一个更大(大约400k个条目),另一个1k

两者都是nx3(行x列),存储3D点(没有重复条目)

为了举例说明,我可以将它们声明为(将numpy导入为np,任意值):

直截了当地说,我想要这个输出:

>>array([False,True,False,False,True])
我只是想知道a中的哪些行是b行,而不是b行是哪一行或其他更复杂的行。所以有一种原生的numpy(某种“np.compare_rowwise(b,a)”)方法可以做到这一点

目前我正在使用for循环,类似于这样:

for point in b:
    # 'occurance index' is the row index where point in b is equal
    occurence_index = np.where(np.all(a == point,axis=1))[0]
实际上,它工作得很好,但速度非常慢,在很多帖子中,我读到很多更有经验的人说:“在numpy中避免for循环”

我的真实场景是:我有很多激光雷达点云(用laspy读取,它们的XYZ坐标存储为“大”n x 3矩阵),我需要更改一些重新分类的点(小”n x 3矩阵)的分类代码(存储为一维numpy数组)。使用发生的一维布尔数组,我可以轻松地执行“cloud.classification[occurrence\u vector]=newclasscode”

那么,我怎样才能用numpy做到这一点呢


我真的对解决我的问题很感兴趣,我会接受任何其他最快python工具的建议。

我希望这个python代码片段能帮你完成这项工作


[如果i.tolist()在[j.tolist()代表j在b]中为True,如果i在a中为False]

感谢您的回答,但我认为使用列表会严重减慢过程。。。
>>array([False,True,False,False,True])
for point in b:
    # 'occurance index' is the row index where point in b is equal
    occurence_index = np.where(np.all(a == point,axis=1))[0]