我想检查一个数组(exp1,exp2,exp3,..)是另一个数组sim的子集,但元素的差可以在(+-2)范围内。下面是一个例子
sim = [205.46,195.93,189.6,184.01,179.23,158.31,149.07,129.27,110.87,94.524,81.518,49.244,43.926,28.643]
exp1 = [190.61, 109.5, 42.323 ] # This is a subset
exp2 = [205, 28.6] # This is a subset
exp3 = [88] # This is NOT a subset
exp4=[208.14, 125.162, 186.2] # This is NOT a subset我发现这段代码可以很容易地找到子集,但我不知道如何包含+2到-2之间的范围。
# Return 1 if arr2[] is a subset of
# arr1[]
def isSubset(arr1, arr2, m, n):
i = 0
j = 0
for i in range(n):
for j in range(m):
if(arr2[i] == arr1[j]):
break
# If the above inner loop was
# not broken at all then arr2[i]
# is not present in arr1[]
if (j == m):
return 0
# If we reach here then all
# elements of arr2[] are present
# in arr1[]
return 1
# Driver code
if __name__ == "__main__":
arr1 = [11, 1, 13, 21, 3, 7]
arr2 = [11, 3, 7, 1]
m = len(arr1)
n = len(arr2)
if(isSubset(arr1, arr2, m, n)):
print("arr2[] is subset of arr1[] ")
else:
print("arr2[] is not a subset of arr1[]")在我找到这样做的方法之后,我将遍历模拟数组,比如sim1,sim2,...在这里,我试图将一组模拟结果与一组实验结果进行比较,误差条在+-2以内。我很感谢你的帮助。
发布于 2021-04-08 02:03:51
我认为你只需要在isSubset函数的条件语句中添加这个比较句:
if (arr2[i] >= arr1[j]-2 and arr2[i] <= arr1[j]+2):
break您还可以使该过程更有效率:
for i in range(n):
for j in range (m):
if (arr2[i] >= arr1[j]-2 and arr2[i] <= arr1[j]+2):
break
if j == m-1:
return 0在python中,您不需要对for循环进行任何声明,因为默认情况下,python只是从0循环到m-1。
https://stackoverflow.com/questions/66991499
复制相似问题