【问题标题】:Why does my random variable code throw a TypeError?为什么我的随机变量代码会抛出 TypeError?
【发布时间】: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


【解决方案1】:

它不应该是生成器:

def uniform_generator(a, b):
    # you want to rename it now, since it isn't a generator anymore
    #while True:
        b = uniform(loc=a, scale=b)
        #yield b.rvs(1)
        return b.rvs(1)

#num_gen = uniform_generator(1, 5)
# numbers = [float(next(num_gen)[0]) for _ in range(1000)]
numbers = [uniform_generator(1,5) for _ in range(1000)]

或者,你把它变成一个像你一样的生成器,但你需要在 1000 之后打破它:

def uniform_generator(a, b, wanted):
    for _ in range(wanted):
        b = uniform(loc=a, scale=b)
        yield b.rvs(1)

numbers = [n for n in uniform_generator(1,5, 1000)]

【讨论】:

    【解决方案2】:

    您将 b 作为统一的比例传递,并在第一次迭代后覆盖它。只需将其重命名为:

    def uniform_generator(a, b):
    while True:
        c = uniform(loc=a, scale=b)
        yield c.rvs(1)
    

    【讨论】:

      猜你喜欢
      • 2019-01-09
      • 2014-11-20
      • 1970-01-01
      • 2019-10-07
      • 1970-01-01
      • 2022-07-15
      • 2021-03-13
      • 2019-11-28
      • 1970-01-01
      相关资源
      最近更新 更多