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