Targets
包含目标值,Observation
包含观察值。
我希望我的for循环计算每个观察值的不同目标值的数量,并将它们存储在矩阵obs_array
中,其中行是对象值,列是目标值。
对于我提供的示例,它必须返回:
obs_array = [[3,2],[2 5]]
意味着对于观察中的零,目标值中有3次0和1次(第一个列表),对于观察中的那些,有2次0和5次1(第二个列表) 但循环不能正常工作。你能找到问题并为我解释一下吗? (我是Python新手)
Target = [1,1,1,0,0,1,0,1,1,0,0,1]
Observation = [1,0,1,0,1,1,0,1,1,1,0,0]
target_values = list(set(S))
observation_values = list(set(A))
obs_array = [[0 for x in range(len(observation_values))] for x in range(len(target_values))]
for k in range(len(observation_values)):
for kk in range(len(Observation)):
if observation_values[k] == Observation[kk]:
for kkk in range(len(Target)):
for kkkk in range(len(target_values)):
if Target[kkk] == target_values[kkkk]:
obs_array[k][kkkk]+=1
print(obs_array)
答案 0 :(得分:2)
我知道这不是你问题的真正答案,但这里是解决你问题的有趣方法(部分是为了帮助别人了解你的要求,因为这个问题很混乱):
from collections import Counter
for (s, a), count in Counter(zip(S, A)).items():
obs_array[s][a] = count
print obs_array # [[3, 2], [2, 5]]
编辑:我现在意识到不需要这样的技巧。此代码也可以使用:
for i in range(len(S)):
obs_array[S[i]][A[i]] += 1