【问题标题】:An explanation of randint(2) < 1 in python, I cannot understand what the < 1 doesrandint(2) < 1 在 python 中的解释,我无法理解 < 1 的作用
【发布时间】:2014-04-03 07:04:51
【问题描述】:

在python中,给定 randint(2) , 有人可以解释一下 是什么意思?

我正在使用 IP[y]:笔记本

请原谅之前的信息不足,这是代码

%pylab inline
from __future__ import division
import pandas as pd
c = randint(2 ,size=100) < 1
s1 = pd.Series(c)
s1.head()
s1.value_counts()

【问题讨论】:

  • 附加代码在这里至关重要;你没有random.randint()numpy.random.randint(),一个非常不同的功能。而该函数的size 参数对结果更为重要;它产生一个数组。

标签: python numpy matplotlib pandas


【解决方案1】:

那条线产生一个真值矩阵。

带有size 参数的numpy.random.randint() function 生成一个新的numpy.ndarray 对象,其中size 元素在0 和2 之间随机选取(排他),因此在本例中为100 0或 1 个值:

>>> numpy.random.randint(2, size=100)
array([0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1,
       0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1,
       1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1,
       0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0,
       1, 1, 1, 1, 1, 1, 1, 0])

&lt; 1 然后生成一个布尔值数组(TrueFalse):

>>> numpy.random.randint(2, size=100) < 1
array([False, False, False, False,  True, False,  True,  True,  True,
       False, False,  True,  True,  True, False, False,  True,  True,
        True, False, False,  True,  True,  True, False, False,  True,
       False, False, False, False, False,  True,  True, False,  True,
       False, False, False,  True, False,  True, False,  True, False,
       False,  True,  True,  True, False,  True,  True, False, False,
       False,  True,  True, False, False, False,  True, False,  True,
        True,  True, False, False, False,  True, False, False, False,
       False, False,  True,  True,  True,  True, False,  True, False,
        True,  True, False,  True, False,  True, False,  True, False,
       False,  True, False, False, False,  True,  True, False,  True, False], dtype=bool)

然后这个数组被转换为 Pandas Series 对象。

【讨论】:

  • Martijn - 原因可能与接受的答案相同(问题发生了重大变化,导致 2 个答案错误)。无论如何,您的答案现在已经被编辑为基本上是我的答案的直接副本 - 也许您可以删除您的答案并支持已经存在的信息,而不是不必要地复制它?
  • @wim:抱歉,事实上,在我编辑我的答案时,我还没有阅读您的答案。不过,您确实添加了一个更好的选择。
【解决方案2】:

由于您使用的是pylab,这不是内置的random.randint而是numpy.random.randint,完全不同的功能。

这里&lt; 1用于将整数数组转为布尔数组:

>>> np.random.randint(2, size=100)
array([0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1,
       0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0,
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1,
       1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0,
       1, 1, 0, 0, 0, 1, 0, 0])
>>> np.random.randint(2, size=100) < 1
array([False, False,  True, False, False,  True,  True,  True,  True,
       False, False, False, False, False,  True, False,  True,  True,
       False, False, False, False,  True, False,  True,  True, False,
        True, False,  True,  True,  True,  True, False,  True, False,
       False,  True,  True, False,  True,  True, False,  True, False,
        True,  True, False, False,  True,  True,  True,  True, False,
       False,  True,  True, False,  True, False, False,  True,  True,
        True,  True,  True, False,  True,  True, False,  True,  True,
       False, False,  True,  True,  True,  True,  True, False, False,
        True, False, False, False,  True, False, False,  True,  True,
        True,  True, False,  True, False, False, False, False, False,  True], dtype=bool)

实现这一点的更 Pythonic 的方法是这样做:

randint(2, size=100).astype(bool)

【讨论】:

  • 谢谢各位,这真的很有帮助。该代码是更大代码的一部分,我需要先理解它,然后才能继续深入。真/假答案使我理解了其余的代码。你们真棒。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-08-28
  • 2013-12-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-31
  • 2022-06-27
相关资源
最近更新 更多