gpt4 book ai didi

python - 组合 python 列表元素,其中值为 1 加上偏移量(屏蔽)

转载 作者:行者123 更新时间:2023-12-03 20:51:58 24 4
gpt4 key购买 nike

目标是找到一种通用方法来解决以下任务:

我有 两个相同长度的 Python 列表用零和一填充 :

detection = [0,0,1,0]     # only examples, they can be of any length
ground_truth = [0,1,0,0] # and the ones can be at any indizes

和一个整数
offset = 1                # this number is also variable

目标是结合# offset detection 中的元素元素周围等于 1然后组合 ground_truth 的相同索引元素逻辑 or ,产生新列表:
detection = [0,1]
ground_truth = [0,1]

图解说明:

enter image description here

背景信息:检测/地面真值属于时间序列的二元分类,其想法是进行灵活的评估,如果 detection 产生 TP适合 ground_truth在一定的时间步长范围内(= offset)。

附加示例:
offset = 1
detection = [1,0,0,0,1,1,0]
ground_truth = [0,0,0,1,0,0,0]

将导致:
detection = [1,0,1]
ground_truth = [0,0,1]

最佳答案

我的第一个想法是使用切片 [i-offset:i+offset+1]
如果列表具有不同的长度,那么您可以获得更短的长度

shorter = min(len(detection), len(ground_truth))

要单独使用列表,您必须首先找到索引。

我用 [offset:shorter-offset]因为我假设您不想检查左侧或右侧是否没有足够的元素(如果元素较少,则 offset )。
indexes = [i for i, val in enumerate(detection[offset:shorter-offset], offset) if val == 1]

现在你可以使用索引
for i in indexes:
#item = detection[i-offset:i] + detection[i+1:i+1+offset]
# or

item = detection[i-offset:i+offset+1]
item.pop(offset) # remove value in the middle

print(' detection item:', item)

我不知道你想用 or 做什么逻辑 - 所以我跳过它。

代码 - 与 offset=2
detection    = [0,0,1,0,1,1,0,1,0,1,1]   # longer
ground_truth = [0,1,0,0,0,0,1,0]

#detection = [0,0,1,0,0,0,1,0,0] # shorter
#ground_truth = [0,0,1,0,1,1,0,1,0,1,1]

print(' detection:', detection)
print('ground_truth:', ground_truth)

offset = 2
shorter = min(len(detection), len(ground_truth))

indexes = [i for i, val in enumerate(detection[offset:shorter-offset], offset) if val == 1]
print('indexes:', indexes)

for i in indexes:
#item = detection[i-offset:i] + detection[i+1:i+1+offset]
# or

item = detection[i-offset:i+offset+1]
item.pop(offset) # remove value in the middle

print(' detection item:', item)

for i in indexes:
#item = ground_truth[i-offset:i] + ground_truth[i+1:i+1+offset]
# or

item = ground_truth[i-offset:i+offset+1]
item.pop(offset) # remove value in the middle

print('ground_truth item:', item)

结果:
   detection: [0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1]
ground_truth: [0, 1, 0, 0, 0, 0, 1, 0]
indexes: [2, 4, 5]
detection item: [0, 0, 0, 1]
detection item: [1, 0, 1, 0]
detection item: [0, 1, 0, 1]
ground_truth item: [0, 1, 0, 0]
ground_truth item: [0, 0, 0, 1]
ground_truth item: [0, 0, 1, 0]

第二个想法是使用 shift()将值从上一行/下一行移动到同一行但到新列。但是对于新信息,我认为它创建了太多新列,因此我将其删除。

我想知道是否可以用 rolling(window=3) 来完成但我无法创建解决方案。

文件: shift , apply , rolling

关于python - 组合 python 列表元素,其中值为 1 加上偏移量(屏蔽),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62407188/

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