python - How to check if 2-D array is in another 2-D array -


consider 2 dataframes df1 , df2

df1 = pd.dataframe(np.zeros((6, 6)), list('abcdef'), list('abcdef'), dtype=int) df1.iloc[2:4, 2:4] = np.array([[1, 2], [3, 4]])  df1 

enter image description here

df2 = pd.dataframe(np.array([[1, 2], [3, 4]]), list('cd'), list('cd'), dtype=int)  df2 

enter image description here

it's clear df2 in df1. how test in general?

assuming dataframes contain 0's , 1s only, can use 2d convolution , if element in convoluted output equal number of elements in df2 -

from scipy.signal import convolve2d  out = (convolve2d(df1,df2)==df2.size).any() 

for generic case, let me use skimage module , this smart solution -

from skimage.util import view_as_windows vieww  out = ((vieww(df1.values, df2.shape) == df2.values).all(axis=(2,3))).any() 

this template-matching problem , has been discussed , have gotten efficient solutions under post : how can check if 1 two-dimensional numpy array contains specific pattern of values inside it?. post gives indices of places in df1 df2 located.


Comments