Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 计算两个事件之间OB数量的算法_Python_Algorithm - Fatal编程技术网

Python 计算两个事件之间OB数量的算法

Python 计算两个事件之间OB数量的算法,python,algorithm,Python,Algorithm,我需要开发一种算法,能够计算从一个事件(发生率为真/假存储在列表Vec1中)到另一个事件(发生率为真/假存储在列表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,

我需要开发一种算法,能够计算从一个事件(发生率为真/假存储在列表Vec1中)到另一个事件(发生率为真/假存储在列表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”事件之间经过的天数。逻辑结构可以如下所示:

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]
1) 在第一个向量中找到值“True”,并从那天开始计数; 2) 继续计数,直到在第二个向量中找到“True”,然后重置计数器

要填充空的结果列表,请执行以下操作:

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,0,0,0,0,0,1,0,0,0,0,0,0]
有人能帮我吗?请询问是否需要进一步解释

示例 约翰在15天的日历上的第0、4、5、8、10天喝咖啡。保罗在15天的日历中的第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)约翰喝酒,保罗不喝酒,因此计数从0开始; 1) 没有人喝咖啡,因此计数增加到1; 2) 保罗喝酒,所以计数增加到2,然后关闭; 3) 没有计数被激活; 4) 两种饮料,因此计数在同一天以0开始和结束; 5) 约翰喝酒,保罗不喝酒:所以计数被激活,从零开始; 6) 一天不喝酒->计数=1 7) Paul饮料->计数=2并重置为0 8) 两人都喝酒,所以计数从0开始,当天结束 9) 约翰喝酒,所以计数从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
例如


也许是我,但你的解释似乎有点难以理解。@RaulGuiu,我很确定是我;)我将试着编辑这个问题并举例说明,它本身不是一个很明显的概念,加上我不太好的解释能力。不仅很难理解,而且从你的解释来看,第二个结果似乎是正确的。我可以向你推荐吗?像“ValueInd”这样的东西在python函数中不是很可以接受的命名风格=)我已经在我的实际项目中进行了测试,它工作得非常好,谢谢mate。为了完整起见,我只是指出一点:在
if v1:
块中缺少一个
c=0
,因为如果不是,计数器不会重新启动。感谢简短清晰的工作脚本!
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]