我有一个numpy数组列表和一个numpy数组。我想检查该单个数组是否是列表的成员。
我想有一种方法,我没有正确搜索...这就是我想出的:
def inList(array, list):
for element in list:
if np.array_equal(element, array):
return True
return False
这个实现是否正确?这有什么功能吗?
我有一个numpy数组列表和一个numpy数组。我想检查该单个数组是否是列表的成员。
我想有一种方法,我没有正确搜索...这就是我想出的:
def inList(array, list):
for element in list:
if np.array_equal(element, array):
return True
return False
这个实现是否正确?这有什么功能吗?
使用动词 is
谈论python时有点含糊不清。这个例子涵盖了我能想到的所有案例:
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:不要使用 list
对于变量名称,因为它是保留关键字,并且经常导致细微的错误。同样,不要使用 array
。
假设你有一个像这样的数组:
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 ]
不,你可以检查这样的子列表:
In [80]: [1,22,4] in a
Out[80]: False
In [81]: [1,24,4,5] in a
Out[81]: True