【问题标题】:How to check if a Numpy array is a subarray of another bigger array如何检查 Numpy 数组是否是另一个更大数组的子数组
【发布时间】:2019-11-12 09:51:39
【问题描述】:

所以基本上我有两个数组,我想检查一个数组是否在另一个数组中......我正在寻找一种方法来做这样的事情:

>>> arr1 = np.array([1, 0, 0, 1, 1, 0])
>>> arr2 = np.array([0, 0, 1, 1, 1, 0])
>>> test_array = np.array([1, 1, 1])
>>> test_array in arr1
... False
>>> test_array in arr2
... True

有没有办法解决这样的事情?谢谢。

【问题讨论】:

标签: python arrays python-3.x numpy numpy-ndarray


【解决方案1】:

最直观的方式似乎是这样的迭代过程:

def isSubset(arr1, arr2): 

    m = len(arr1)
    n = len(arr2)

    for i in range(0, n):
        for j in range(0, m):  
            if arr2[i] == arr1[j] 
                break; 
        """ 
        If the above inner loop was 
        not broken at all then arr2[i] 
        is not present in arr1 
        """
        if j == m:
           return False 
    """
    If we reach here then all 
    elements of arr2 are present 
    in arr1
    """
    return True

【讨论】:

    【解决方案2】:

    尝试使用 2D 蒙版:

    ix = np.arange(len(arr1) - len(test_array))[:,None] + np.arange(len(test_array))
    (arr1[ix] - test_array).all(axis=1).any()
    >> False
    (arr2[ix] - test_array).all(axis=1).any()
    >> True
    

    或在函数中:

    def array_in(arr, test_arr):
        return (arr[np.arange(len(arr) - len(test_arr))[:,None] +
                   np.arange(len(test_arr))] == test_arr).all(axis=1).any()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-24
      • 1970-01-01
      • 2016-12-13
      • 2018-12-17
      • 2012-05-20
      • 1970-01-01
      • 2017-05-30
      相关资源
      最近更新 更多