Home > Enterprise >  Find whether 1D sub-array is in 2D array
Find whether 1D sub-array is in 2D array

Time:06-02

I have a data-array like:

all = [[1,-1], [1,0], [1,1], [2,-1], [2,0], [2,1]]  etc.

It has about 4000 pairs in it, but typically fewer on the order of a few hundred.

I need to find whether a two-valued array already exists in this large data-array, eg. does [1,1] exist in the array?

So the function I need should act something like this:

isValid( all, [1,1] )
>>> True

isValid( all, [1,100] )
>>> False

I couldn't get the numpy functions isin() or in1d() to do this for me. The one function I did find works, for lists, is:

all.index( [1,1] )
>> True

but when the arg is not in the all array, I have to try/catch a ValueError and then return False - acceptable for now, but not ideal.

CodePudding user response:

You can use simple array lookup like this:

a = [[1,-1], [1,0], [1,1], [2,-1], [2,0], [2,1]]

[2,0] in a # True
[2,3] in a # False

or

a.index([2,0]) # result: 4
a.index([3,5]) # throw error, use try catch

CodePudding user response:

If you have numpy installed, you can use np.where to find the indices of 1d array in a 2d numpy array and check if the return result

import numpy as np

def isValid(arr, val):
   return len(np.where(np.prod(arr == val, axis = -1))[0]) != 0

all_items = np.array([[1,-1], [1,0], [1,1], [2,-1], [2,0], [2,1]] )
search1 = isValid(all_items, [1,1] ) # True
search2 = isValid(all_items, [1,100] ) # False
  • Related