我需要开发一个算法,它能够计算从一个事件(在列表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回答“保罗今天喝咖啡了吗?”。所以,我想用这个指标得到的是“约翰饮料”事件和“保罗饮料”事件之间经过的天数逻辑结构如下:
1)在第一个向量中找到“真”值,从那天开始计数;
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天的日历上的第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开始;
1)没有人喝咖啡,因此计数增加到1;
2)保罗喝酒,所以计数增加到2,然后关闭;
3)未激活计数;
4)两种饮料,因此计数在同一天以0开始和结束;
5)约翰喝酒,保罗不喝酒:所以计数被激活,从零开始;
6)一天没有保罗喝酒->计数=1
7)保罗喝酒->计数=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
例如。
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 - 计算两个事件之间有多少个观测值的算法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22657123/