查找一维子数组是否在二维数组中
Find whether 1D sub-array is in 2D array
我有一个像这样的数据数组:
all = [[1,-1], [1,0], [1,1], [2,-1], [2,0], [2,1]] etc.
里面大约有 4000 双,但通常只有几百双。
我需要查找此大型数据数组中是否已存在二值数组,例如。
[1,1]
是否存在于数组中?
所以我需要的功能应该是这样的:
isValid( all, [1,1] )
>>> True
isValid( all, [1,100] )
>>> False
我无法获得 numpy 函数 isin()
或 in1d()
来为我执行此操作。我找到的一个功能,对于列表,是:
all.index( [1,1] )
>> True
但是当 不是 在 all
数组中时,我必须 try/catch 一个 ValueError
然后 return False
- 目前可以接受,但不理想。
如果安装了 numpy,可以使用 np.where 在二维 numpy 数组中查找一维数组的索引,并检查 return 结果是否
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
您可以像这样使用简单的数组查找:
a = [[1,-1], [1,0], [1,1], [2,-1], [2,0], [2,1]]
[2,0] in a # True
[2,3] in a # False
或
a.index([2,0]) # result: 4
a.index([3,5]) # throw error, use try catch
我有一个像这样的数据数组:
all = [[1,-1], [1,0], [1,1], [2,-1], [2,0], [2,1]] etc.
里面大约有 4000 双,但通常只有几百双。
我需要查找此大型数据数组中是否已存在二值数组,例如。
[1,1]
是否存在于数组中?
所以我需要的功能应该是这样的:
isValid( all, [1,1] )
>>> True
isValid( all, [1,100] )
>>> False
我无法获得 numpy 函数 isin()
或 in1d()
来为我执行此操作。我找到的一个功能,对于列表,是:
all.index( [1,1] )
>> True
但是当 不是 在 all
数组中时,我必须 try/catch 一个 ValueError
然后 return False
- 目前可以接受,但不理想。
如果安装了 numpy,可以使用 np.where 在二维 numpy 数组中查找一维数组的索引,并检查 return 结果是否
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
您可以像这样使用简单的数组查找:
a = [[1,-1], [1,0], [1,1], [2,-1], [2,0], [2,1]]
[2,0] in a # True
[2,3] in a # False
或
a.index([2,0]) # result: 4
a.index([3,5]) # throw error, use try catch