我正在尝试构建一个从概率分布中抽样的类,并根据该抽样返回一个字符串。目前,我没有像我一样返回字符串,而是获得了一个对象。我知道python类需要一个字符串方法才能正确打印,但是我不确定如何在每次调用方法时返回采样的特定字符串。
class ProbabilityDistribution(object):
def __init__(self, countMap):
self.countMap = countMap
self.total = float(sum(self.countMap.values()))
self.probMap = { k: (v / self.total) for k, v in self.countMap.items() }
def __str__(self):
????
def sample(self):
sampleVal = random(0,1)
count = 0.0
for x in self.countMap.keys():
count = count + self.probMap[x]
if count > sampleVal:
return x
答案 0 :(得分:2)
__str__
应该是在交互式终端中键入print my_obj
时有用的对象的表示。
如果您的对象代表概率分布,它应该打印如下:
<ProbabilityDistribution, 3 bins>
或
ProbabilityDistribution([0.1, 0.3, 0.6])
而不是
2
在我看来,从概率分布中抽样元素的行为不应与印刷价值的行为混合在一起。
如果您需要从分发中抽样并打印它们,请执行以下操作:
for n in range(n_samples):
x = distribution.sample()
print x
答案 1 :(得分:0)
您可以在返回之前将sample()
值存储在私有字段中。如果您只是在每次想要将对象转换为字符串时调用sample()
,那么每次都会得到不同的字符串。这样,当您致电sample()
时,您只会获得一个新字符串。将其添加到__init__
方法:
self.mostRecentSample = None
并在sample
方法中更改此内容:
if count > sampleVal:
self.mostRecentSample = x
return x
然后你的__str__
方法是这样的:
def __str__(self):
return str(mostRecentSample)
正如其他人所指出的那样,应该说这是对__str__
的一种相当尴尬的用法,并不是该方法的用途。如果可能的话,我会建议您了解如何设计实施方案。