gpt4 book ai didi

algorithm - 根据 python 中的 %age overlap,使用另一个不同长度和范围的列表有条件地替换一个列表中的值

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:08:42 26 4
gpt4 key购买 nike

一个文本文件“Truth”包含以下这些值:

0.000000    3.810000    Three
3.810000 3.910923 NNNN
3.910923 5.429000 AAAA
5.429000 7.060000 AAAA
7.060000 8.411000 MMMM
8.411000 8.971000 MMMM
8.971000 13.40600 MMMM
13.40600 13.82700 Zero
13.82700 15.935554 One

另一个文本文件,“测试”包含以下值:

0.000000    3.810000    Three
3.810000 3.910923 Three
3.910923 5.429000 AAAA
5.429000 7.060000 Three
7.060000 8.411000 Three
8.411000 8.971000 Zero
8.971000 13.40600 Three
13.40600 13.82700 Zero
13.82700 15.935554 Two
15.935554 20.138337 Two

现在我想用 Truth 中的 MMMM 标签替换 Test 中的标签。

我目前的工作代码是:

### Assuming I have already read in both the files into truth and test

res = []

for j in range(len(truth)):
if truth[j][2]== 'MMMM' and truth[j][0]==test[j][0] and truth[j][1]==test[j][1]:
res.append((test[j][0], test[j][1],truth[j][2]))
else:
res.append((test[j][0], test[j][1],test[j][2]))
for i in range(len(res)):
print res[i]

我的代码很丑陋,但只要范围匹配就可以正常工作。但是我不确定如何处理以防真实文件比测试文件长得多,即间隔和标签的数量更多。

Ex 我的真实文件可能是这样的:

    0.000000    1.00000     MMMM
1.000 3.810000 Three
3.810000 3.910923 NNNN
3.910923 5.429000 AAAA
5.429000 6.0000 MMMM
6.0000 7.060000 AAAA
7.060000 8.411000 MMMM
8.411000 8.971000 MMMM
8.971000 11.00 abcd
11.00 13.40600 MMMM
13.40600 13.82700 Zero
13.82700 15.935554 One

在这种情况下,我该如何准确地进行标签的更新/替换,同时将数据丢失降至最低?

换句话说,我应该如何创建一些条件指标,例如在给定时间范围内用 MMMM 替换标签的 80 %age overlap?请指教。谢谢

最佳答案

我不确定我是否完全理解你的问题,但如果你指的是我认为你是什么,那么你需要担心“越界”以及“真相”和测试不会相同的事实j 中的通信 - 如您所述。

解决这个问题的方法是对 truth[j] 和 test[k](或任何你想称呼的名称)使用两个不同的索引。您显然可以使用两个循环来连续迭代整个测试,但这不会使代码高效。

我建议使用第二个索引作为一个计数器,它会持续增加 1(将其视为一个 while 循环,它是 while "value test[k] in range of value truth[j] 并做您当前正在做的事情。

每当你到达一个点,即 test[k] 值超出你当前的 truth[j] 范围时,你继续到下一个 j(真实值区间)。

希望有所帮助并有意义


l_truth = len(truth)
l_test = len(test)

count = 0

res = []

for j in range(l_truth):
count2= count
for k in range(count2,l_test):
if truth[j][2]== 'MMMM':
min_truth = truth[j][0]
max_truth = truth[j][1]
min_test = test[k][0]
max_test = test[k][1]

#diff_truth = max_truth - min_truth
diff_test = max_test - min_test

if (min_truth <= min_test) and (max_truth >= max_test):
res.append((test[k][0], test[k][1],truth[j][2]))
count +=1
elif (min_truth <= min_test) and (max_truth <= max_test):
#diff_min = min_truth - min_test
diff_max = max_test - max_truth
ratio = diff_max/diff_test
if ratio <= 0.2:
res.append((test[k][0], test[k][1],truth[j][2]))
count +=1
elif (min_truth >= min_test) and (max_truth >= max_test):
diff_min = min_truth - min_test
#diff_max = max_test - max_truth
ratio = diff_min/diff_test
if ratio <= 0.2:
res.append((test[k][0], test[k][1],truth[j][2]))
count+=1
elif (min_truth >= min_test) and (max_truth <= max_test):
diff_min = min_truth - min_test
diff_max = max_test - max_truth
ratio = (diff_min+diff_max)/diff_test
if ratio <= 0.2:
res.append((test[k][0], test[k][1],truth[j][2]))
count+=1
else:
pass
else:
continue

for i in range(len(res)):
print res[i]

检查这是否有效。实际上,我不得不使用两个循环,但我确信还有其他更有效的方法可以做到这一点。

关于algorithm - 根据 python 中的 %age overlap,使用另一个不同长度和范围的列表有条件地替换一个列表中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49176702/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com