【发布时间】:2018-05-19 06:03:14
【问题描述】:
我写了一段代码来确定当 X 骰子被掷出时得到 Y 值的概率。我使用的等式包含从 0 到 Y 的总和。
我想在网格上绘制值(骰子数 - 值的总和)并创建了一个网格。
import scipy.special
from matplotlib import pyplot as plt
from matplotlib import cm as cm
import numpy as np
from numpy import exp,arange
def probability_of_sum(sum, dice, faces):
# Give different names.
X = sum
Y = dice
Z = faces
# Calculations, calculations, calculations.
# Dummy values.
wanted_possibilities = 1
total_possibilities = 2
probability = wanted_possibilities/total_possibilities
return {'wanted_possibilities':wanted_possibilities, 'total_possibilities':total_possibilities, 'probability':probability}
# Main part of the function.
# Consider 1 to 8 dice
# Get probabilities for lowest possible sum (8) to highest possible sum (48)
dice_range = np.linspace(1, 8, num=8)
value_range = np.linspace(1, 8*6, num=8*6)
X,Y = np.meshgrid( dice_range, value_range)
# Calculate value for each grid point separately using VECTORIZE.
value_prob = np.vectorize(probability_of_sum)( Y, X, 6)
我的函数的输出现在是一个二维字典数组(下面是虚拟值):
[[{'Wanted_possibilities': 0, 'total_possibilities':1, 'probability':0}
{'Wanted_possibilities': 1, 'total_possibilities':1, 'probability':1}]
[{'Wanted_possibilities': 0, 'total_possibilities':2, 'probability':0}
{'Wanted_possibilities': 1, 'total_possibilities':2, 'probability':0.5}]
[{'Wanted_possibilities': 0, 'total_possibilities':3, 'probability':0}
{'Wanted_possibilities': 1, 'total_possibilities':3, 'probability':0.33}]
[{'Wanted_possibilities': 0, 'total_possibilities':4, 'probability':0}
{'Wanted_possibilities': 1, 'total_possibilities':4, 'probability':0.25}] ]
如何从这里继续将输出(“概率”)绘制为 X 和 Y 的二维函数?
value_prob['probability']
给我错误
IndexError:只有整数、切片 (
:)、省略号 (...)、numpy.newaxis(None) 以及整数或布尔数组是有效的索引。
我可以使用
访问单个元素(value_prob[1,1])['probability']
但是我需要一个循环来绘制函数。是否有更通用/强大/更清洁的访问方式?
编辑:我想针对(骰子,值)绘制“概率”。
【问题讨论】:
-
您为什么使用字典来表示您的数据?您可以将值添加到二维数组中。
-
您的
x-y值标头是什么?概率和总可能性,还是想要的可能性和总可能性? -
@O.Suleiman - 我选择使用字典来明确区分“probability_of_sum”函数产生的值。您将如何将值添加到数组中?
-
@Ajax1234 - 2D 图将具有 x = 'dice'、y = 'value'(用于构造网格的值)和 z = 结果中的三个值中的任何一个。让我们说“概率”。
-
@AVS 我的意思是您可以将值直接添加到数组数组中,并通过数组中的索引指示该值代表什么。
标签: python arrays numpy dictionary for-loop