python马尔科夫链算法分析双色球22期历史数据
import numpy as np
# 数据组
data = [[1, 6, 12, 13, 15, 24],
[9, 16, 17, 24, 29, 31],
[2, 3, 9, 13, 19, 28],
[2, 9, 14, 17, 31, 33],
[8, 23, 25, 26, 29, 31],
[13, 14, 18, 19, 24, 30],
[1, 4, 9, 10, 20, 33],
[2, 3, 9, 11, 12, 17],
[8, 9, 13, 23, 24, 26],
[6, 19, 20, 26, 28, 33],
[7, 14, 27, 29, 31, 33],
[2, 3, 7, 16, 30, 31],
[3, 7, 12, 24, 28, 33],
[5, 7, 10, 17, 20, 22],
[8, 10, 22, 27, 32, 33],
[1, 18, 26, 30, 31, 33],
[4, 16, 20, 21, 31, 32],
[3, 6, 9, 17, 27, 28],
[5, 8, 10, 15, 24, 25],
[10, 11, 18, 19, 23, 31],
[2, 5, 6, 19, 21, 27],
[10, 17, 20, 23, 27, 30]]
# 统计每个号码出现的次数
counts = np.zeros(33)
for d in data:
for num in d:
counts[num-1] += 1
# 统计每个号码和其他号码的组合出现的次数
combinations = np.zeros((33, 33))
for d in data:
for i in range(len(d)):
for j in range(i+1, len(d)):
combinations[d[i]-1, d[j]-1] += 1
combinations[d[j]-1, d[i]-1] += 1
# 计算每个号码出现的概率
probs = counts / (len(data) * 6)
# 计算每个号码和其他号码的组合出现的条件概率
cond_probs = np.zeros((33, 33))
for i in range(33):
for j in range(33):
if i != j and counts[i] > 0:
cond_probs[i, j] = combinations[i, j] / counts[i]
# 下一期的双色球前区号码
pred_probs = np.zeros(33)
for i in range(33):
pred_probs[i] = np.sum(probs * cond_probs[:, i])
pred_nums = np.argsort(pred_probs)[::-1][:5] + 1
print("模拟双色球前区号码为:", pred_nums)
该代码首先统计了每个号码出现的次数和每个号码和其他号码的组合出现的次数,然后计算了每个号码出现的概率和每个号码和其他号码的组合出现的条件概率。最后,利用这些概率,预测了下一期的双色球前区号码。
需要注意的是,该代码只是一种基于概率的预测方法,仅供学习研究之用,不保证准确。预测结果可能存在巨大的误差,而且由于双色球开奖是随机的,所以即使根据历史数据建立了马尔科夫链模型,也不能保证预测结果的准确性。因此,在使用该代码进行预测时,需要理性对待,不要盲目跟风,也不要过度依赖模型。
【代码运行结果 仅供欣赏娱乐】
双色球前区号码为: [31 33 9 24 17 10]