I have a list of numpy arrays and a single numpy array. I want to check if that single array is a member of the list.
I suppose there exist a method and I haven't searched properly... This is what I came up with:
def inList(array, list): for element in list: if np.array_equal(element, array): return True return False
Is this implementation correct? Is there any ready function for this?
The variable is_in_list indicates if there is any array within he list of numpy arrays which is equal to the array to check.
To check if the item exists in the list, use Python “in operator”. For example, we can use the “in” operator with the if condition, and if the item exists in the list, then the condition returns True, and if not, then it returns False.
A list in Python is simply a collection of objects. These objects can be integers, floating point numbers, strings, boolean values or even other data structures like dictionaries. An array, specifically a Python NumPy array, is similar to a Python list.
NumPy Arrays are faster than Python Lists because of the following reasons: An array is a collection of homogeneous data-types that are stored in contiguous memory locations. On the other hand, a list in Python is a collection of heterogeneous data types stored in non-contiguous memory locations.
Using the verb is
when talking about python is a bit ambiguous. This example covers all the cases I could think of:
from __future__ import print_function from numpy import array, array_equal, allclose myarr0 = array([1, 0]) myarr1 = array([3.4499999, 3.2]) mylistarr = [array([1, 2, 3]), array([1, 0]), array([3.45, 3.2])] #test for identity: def is_arr_in_list(myarr, list_arrays): return next((True for elem in list_arrays if elem is myarr), False) print(is_arr_in_list(mylistarr[2], mylistarr)) #->True print(is_arr_in_list(myarr0, mylistarr)) #->False #myarr0 is equal to mylistarr[1], but it is not the same object! #test for exact equality def arreq_in_list(myarr, list_arrays): return next((True for elem in list_arrays if array_equal(elem, myarr)), False) print(arreq_in_list(myarr0, mylistarr)) # -> True print(arreq_in_list(myarr1, mylistarr)) # -> False #test for approximate equality (for floating point types) def arreqclose_in_list(myarr, list_arrays): return next((True for elem in list_arrays if elem.size == myarr.size and allclose(elem, myarr)), False) print(arreqclose_in_list(myarr1, mylistarr)) #-> True
PS:do NOT use list
for a variable name, as it is a reserved keyword, and often leads to subtle errors. Similarly, do not use array
.
lets say you have an array like this:
a= [array([ 1, 24, 4, 5]), array([ 22, 4, 123]), array([11, 1, 1])] #convert all subarrays to list a= [ list(item) for item in a ]
no you can check for a sublist like this:
In [80]: [1,22,4] in a Out[80]: False In [81]: [1,24,4,5] in a Out[81]: True
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With