【发布时间】:2019-04-10 21:46:10
【问题描述】:
我想知道,为什么这段代码会引发类型错误以及如何修复它。
def uniform_generator(a, b):
while True:
b = uniform(loc=a, scale=b)
yield b.rvs(1)
num_gen = uniform_generator(1, 5)
numbers = [float(next(num_gen)[0]) for _ in range(1000)]
据我了解,我所做的只是将 1000 个浮点数添加到一个空数组中。问题是什么?我正在使用 Python 3
追溯:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-133-42a9353c6a00> in <module>()
4 num_gen = uniform_generator(1, 5)
5 print(type(float(next(num_gen)[0])))
----> 6 numbers = [float(next(num_gen)[0]) for _ in range(1000)]
7
8 assert([1 <= num and num <= 5 for num in numbers])
<ipython-input-133-42a9353c6a00> in <listcomp>(.0)
4 num_gen = uniform_generator(1, 5)
5 print(type(float(next(num_gen)[0])))
----> 6 numbers = [float(next(num_gen)[0]) for _ in range(1000)]
7
8 assert([1 <= num and num <= 5 for num in numbers])
<ipython-input-107-8956bb825458> in uniform_generator(a, b)
2 while True:
3 b = uniform(loc=a, scale=b)
----> 4 yield b.rvs(1)
5
6 def normal_generator(mean, std):
c:\users\user\anaconda3\lib\site-packages\scipy\stats\_distn_infrastructure.py in rvs(self, size, random_state)
468 kwds = self.kwds.copy()
469 kwds.update({'size': size, 'random_state': random_state})
--> 470 return self.dist.rvs(*self.args, **kwds)
471
472 def sf(self, x):
c:\users\user\anaconda3\lib\site-packages\scipy\stats\_distn_infrastructure.py in rvs(self, *args, **kwds)
936 rndm = kwds.pop('random_state', None)
937 args, loc, scale, size = self._parse_args_rvs(*args, **kwds)
--> 938 cond = logical_and(self._argcheck(*args), (scale >= 0))
939 if not np.all(cond):
940 raise ValueError("Domain error in arguments.")
TypeError: '>=' not supported between instances of 'rv_frozen' and 'int'
【问题讨论】:
-
@Kasramvd 我认为错误在 b.rvs 中。如果我改用
np.random.uniform(a, b),它工作正常
标签: python python-3.x generator typeerror