【问题标题】:how to find indices of a 2d numpy array occuring in another 2d array [duplicate]如何找到另一个二维数组中出现的二维numpy数组的索引[重复]
【发布时间】:2020-11-25 17:38:38
【问题描述】:

我有两个 2d numpy 数组,想找出一个数组在另一个数组中出现的位置:

big_array = np.array([[1., 2., 1.2], [5., 3., 0.12], [-1., 14., 0.], [-9., 0., 13.]])
small_array= np.array([[5., 3., 0.12], [-9., 0., 13.]])

然后我想获取big_array 的行的索引,这些索引与small_array 的任何行相同。我想为二维数组做类似np.in1d 的事情。我的意思是我想要:

result= [1, 3]

我已经尝试了以下代码,但没有成功:

result=[([any(i == big_array ) for i in small_array])]

在此先感谢您的帮助。

【问题讨论】:

    标签: python arrays numpy


    【解决方案1】:

    你想要的是:

    sum([row in small_array for row in big_array])
    

    例子:

    import numpy as np
    big_array = np.array([[1., 2., 1.2], [5., 3., 0.12], [-1., 14., 0.], [-9., 0., 13.]])
    small_array= np.array([[5., 3., 0.12], [-1., 14., 0.]])
    
    result = sum([row in small_array for row in big_array])
    print(result)
    

    2


    编辑(澄清后):

    pythonic 解决方案:

    [i for i, brow in enumerate(big_array) for srow in small_array if all(srow == brow)]
    

    例子:

    big_array = np.array([[1., 2., 1.2], [5., 3., 0.12], [-1., 14., 0.], [-9., 0., 13.]])
    small_array= np.array([[5., 3., 0.12], [-1., 14., 0.]])
    
    result = [i for i, brow in enumerate(big_array) for srow in small_array if all(srow == brow)]
    
    print(result)
    

    [1, 2]

    注意:你可以用 np.where 做一些更好的事情,如果你有很大的数组,你应该查一下

    【讨论】:

    • 亲爱的@Djib2011,感谢您的帮助。您的解决方案是给我相同的总行数,但我想在big_array 中找到这些行的索引。我想为二维数组做类似np.in1d 之类的事情。
    • @Ali_d 我误解了你原来的问题。现在澄清后,我更新了我的答案。
    猜你喜欢
    • 2012-04-10
    • 1970-01-01
    • 2021-03-03
    • 2021-06-04
    • 1970-01-01
    • 2019-07-28
    • 2020-07-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多