Home > OS >  How to check if a numpy array contains the elements of another array in the exact order theyre in in
How to check if a numpy array contains the elements of another array in the exact order theyre in in

Time:11-06

So Im iterating over rows of pixels that'll look like this

row = [0, 0, 0, 0, 255, 255, 0, 0, 255, 0, 0, 0, 0, 0,0]

and I'll have another array called whiteLine which looks like

whiteLine = [255, 255, 255, 255, 255, 255]

And i want to check if there are 6 white pixels in a row. Or basically check if the whiteLine array explicitly exists in the row array

Example

row = [0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 0, 0, 255, 0, 0, 0, 0, 0,0]
True

row = [0, 0, 0, 0, 255, 255, 0, 255, 255, 255, 0, 0, 255, 0, 0, 0, 0, 0,0]
False

CodePudding user response:

I think this can be done via looking at the convolution between row and whiteLine, and checking to see if one gets the value of convolvin whiteLine with itself.
Which makes this a one-liner:

np.any(np.convolve(whiteLine, whiteLine, 'valid')[0] == np.convolve(whiteLine, row, 'valid'))

Testing with the two examples you gave produces the correct outputs, but more importantly, this is a much more general than just searching for "6 consecutive 255s"...

CodePudding user response:

You can use sliding_window_view on row and compare the values against whiteList calling all at axis=1 then any sebsequently:

>>> from numpy.lib.stride_tricks import sliding_window_view
>>> (sliding_window_view(row, window_shape=len(whiteLine))==whiteLine).all(axis=1).any()
True
  • Related