gpt4 book ai didi

python - 计算两个事件之间有多少obs的算法

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

我需要开发一种算法,该算法能够计算从一个事件(发生次数 True/False 存储在列表 Vec1 中)到另一个事件(发生次数True/False 存储在列表 Vec2 中。两份榜单如下:

Vec1 = [True, False, False, False, False, True, True, True, False, True, True, True, False, True, False, True, False, False, False, True]
Vec2 = [True, False, False, True, True, True, False, True, False, True, True, True, False, True, True, True, True, False, False, True]

为了得到更好的解释,假设 Vec1 正在回答“约翰今天喝咖啡了吗?” Vec2 正在回答“保罗今天喝咖啡了吗?”。所以,我想用这个指标得到的是事件“John drinks”和事件“Paul drinks”之间经过的天数。逻辑结构如下:

1) 在第一个向量中找到值“True”,并从那天开始计数;2)继续计数,直到找到第二个向量中的“真”,从那一刻起重置计数器。

填充空的结果列表:

ValueInd = []

到目前为止,我已经能够建立这个:

trueVector1 = 0
trueVector2 = 0
countAct = False
Count = 0

while len(ValueInd) < len(Vec1):
while Vec1[trueVector1] == False:
ValueInd.append(Count)
trueVector1 += 1
countAct = True
trueVector2 = trueVector1
while countAct == True:
if Vec2[trueVector2] == True:
countAct = False
ValueInd.append(Count)
Count = 0
trueVector1 = trueVector2 + 1
else:
ValueInd.append(Count)
trueVector2 += 1
Count += 1

除了现在算法的可怕结构(我稍后会修改)之外,我无法获得合适的解决方案,因为这个算法不起作用。根据我上面提供的数据,正确的输出应该是:

ValueInd = [0,0,0,0,0,0,0,1,1,2,1,1,0,1,2,1,0,0,0,0]

我实际得到的输出是:

ValueInd = [0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0]

有人可以帮我吗?请询问您是否需要进一步的解释。

示例在 15 天的日历中,约翰在第 0、4、5、8、10 天喝咖啡。在 15 天的日历中,Paul 在第 2、4、7、8、11 天喝咖啡。因此,出现向量是:

John = [T, F, F, F, T, T, F, F, T, F, T, F, F, F, F, F]
Paul = [F, F, T, F, T, F, F, T, T, F, F, T, F, F, F, F]

此示例中的结果向量将是:

Days = [0, 1, 2, 0, 0, 0, 1, 2, 0, 0, 0, 1, 0, 0, 0, 0]

这是因为:0) John喝酒而Paul不喝酒,所以计数从0开始;1) 没有人喝咖啡所以计数增加到 1;2)保罗喝了,所以计数增加到2,然后关闭;3)不激活计数;4) 都喝了,所以计数在同一天以0开始和结束;5)约翰喝酒,保罗不喝酒:所以计数被激活并从零开始;6) 保罗一天不喝酒 -> 计数 = 17) Paul drinks -> count = 2 并重置为 08)两人都喝酒,所以计数从0开始,同一天结束9) John 喝了酒,所以计数从 0 开始10) 保罗喝酒,所以计数以 1 结尾11 - 15) 没有人喝所以计数总是零。

最佳答案

以下作品,

def get_counts(Vec1, Vec2):
c = 0
counts = []
counting = False
for v1, v2 in zip(Vec1, Vec2):
counts.append(c)
if v1:
counting = True
c = 0
if v2:
counting = False
c = 0
if counting:
c += 1

例如

T = True
F = False
John = [T, F, F, F, T, T, F, F, T, F, T, F, F, F, F, F]
Paul = [F, F, T, F, T, F, F, T, T, F, F, T, F, F, F, F]
get_counts(John, Paul)

>> [0, 1, 2, 0, 0, 0, 1, 2, 0, 0, 0, 1, 0, 0, 0, 0]

关于python - 计算两个事件之间有多少obs的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22657123/

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