gpt4 book ai didi

python - 在 Python/Numpy 中使用单词构建转换矩阵

转载 作者:太空狗 更新时间:2023-10-30 01:47:43 25 4
gpt4 key购买 nike

我正在尝试用这些数据构建一个 3x3 转换矩阵

days=['rain', 'rain', 'rain', 'clouds', 'rain', 'sun', 'clouds', 'clouds', 
'rain', 'sun', 'rain', 'rain', 'clouds', 'clouds', 'sun', 'sun',
'clouds', 'clouds', 'rain', 'clouds', 'sun', 'rain', 'rain', 'sun',
'sun', 'clouds', 'clouds', 'rain', 'rain', 'sun', 'sun', 'rain',
'rain', 'sun', 'clouds', 'clouds', 'sun', 'sun', 'clouds', 'rain',
'rain', 'rain', 'rain', 'sun', 'sun', 'sun', 'sun', 'clouds', 'sun',
'clouds', 'clouds', 'sun', 'clouds', 'rain', 'sun', 'sun', 'sun',
'clouds', 'sun', 'rain', 'sun', 'sun', 'sun', 'sun', 'clouds',
'rain', 'clouds', 'clouds', 'sun', 'sun', 'sun', 'sun', 'sun', 'sun',
'clouds', 'clouds', 'clouds', 'clouds', 'clouds', 'sun', 'rain',
'rain', 'rain', 'clouds', 'sun', 'clouds', 'clouds', 'clouds', 'rain',
'clouds', 'rain', 'sun', 'sun', 'clouds', 'sun', 'sun', 'sun', 'sun',
'sun', 'sun', 'rain']

目前,我正在使用一些临时词典和一些单独计算每种天气概率的列表来做这件事。这不是一个很好的解决方案。有人可以指导我更合理地解决这个问题吗?

self.transitionMatrix=np.zeros((3,3))

#the columns are today
sun_total_count = 0
temp_dict={'sun':0, 'clouds':0, 'rain':0}
total_runs = 0
for (x, y), c in Counter(zip(data, data[1:])).items():
#if column 0 is sun
if x is 'sun':
#find the sum of all the numbers in this column
sun_total_count += c
total_runs += 1
if y is 'sun':
temp_dict['sun'] = c
if y is 'clouds':
temp_dict['clouds'] = c
if y is 'rain':
temp_dict['rain'] = c

if total_runs is 3:
self.transitionMatrix[0][0] = temp_dict['sun']/sun_total_count
self.transitionMatrix[1][0] = temp_dict['clouds']/sun_total_count
self.transitionMatrix[2][0] = temp_dict['rain']/sun_total_count

return self.transitionMatrix

对于每种类型的天气,我需要计算第二天的概率

最佳答案

如果您不介意使用 pandas,可以使用单行代码来提取转移概率:

pd.crosstab(pd.Series(days[1:],name='Tomorrow'),
pd.Series(days[:-1],name='Today'),normalize=1)

输出:

Today      clouds      rain       sun
Tomorrow
clouds 0.40625 0.230769 0.309524
rain 0.28125 0.423077 0.142857
sun 0.31250 0.346154 0.547619

在这里,假设今天下雨,明天将是晴天的(前向)概率在“雨”列、“太阳”行中找到。如果您想要后向概率(鉴于今天的天气,昨天的天气可能是什么),请切换前两个参数。

如果您想将概率存储在行而不是列中,请设置 normalize=0 但请注意,如果您直接在本示例中这样做,您将获得存储为行的反向概率.如果你想获得与上面相同的结果但转置你可以 a) 是,转置或 b) 切换前两个参数的顺序并将 normalize 设置为 0。

如果您只想将结果保留为 numpy 二维数组(而不是 pandas 数据框),请在最后一个括号后键入 .values

关于python - 在 Python/Numpy 中使用单词构建转换矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47297585/

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