布尔在一个numpy总和

时间:2014-12-02 23:32:59

标签: python numpy

我有一段使用numpy.sum:

的代码
import numpy as np
n = 1000
ndice = 10
nsix = 3
dice = np.random.random_integers(6,size=(ndice,n))
p = np.sum(np.sum(dice==6,0)>=nsix)/float(n)
print 'probability:', p

我基本上在想,这条线在做什么:

p = np.sum(np.sum(dice==6,0)>=nsix)/float(n)

查看numpy.sum文档,我无法真正了解它的使用方式:http://docs.scipy.org/doc/numpy/reference/generated/numpy.sum.html

我猜有两个部分。

1这取得了什么成果?

np.sum(dice==6,0)

2它是否...加一个布尔值?

非常感谢任何解释,谢谢。

3 个答案:

答案 0 :(得分:2)

dice是一个ndice x n或10 x 1000的整数值矩阵,从1到6. dice==6将该矩阵转换为对应于所有6的True的布尔矩阵。

np.sum(dice==6,0)np.sum(dice==6, axis=0)相同,意味着总和是沿ndice轴取的,所以现在你有一个1 x 1000的数组。你有n = 1000次运行,每次运行有ndice = 10 die。这个1 x 1000阵列现在表示每次运行中有10个模具出现了6s。

np.sum(dice==6,0)>=nsix将其转换为布尔值为1 x 1000的数组,如果至少nsix个数量为6s,则每次运行(此处我们有1000次运行)将为真。取这个1 x 1000阵列的总和,然后给出运行次数,这是真的。

答案 1 :(得分:1)

如果你不能自己运行程序,我会为你运行它,这些是各个部分:

In [28]: dice
Out[28]: 
array([[2, 2, 2, ..., 5, 1, 1],
       [3, 1, 3, ..., 6, 3, 5],
       [1, 3, 4, ..., 6, 4, 6],
       ..., 
       [1, 4, 6, ..., 1, 1, 4],
       [1, 1, 1, ..., 6, 1, 3],
       [6, 2, 6, ..., 2, 6, 5]])

In [29]: dice==6
Out[29]: 
array([[False, False, False, ..., False, False, False],
       [False, False, False, ...,  True, False, False],
       [False, False, False, ...,  True, False,  True],
       ..., 
       [False, False,  True, ..., False, False, False],
       [False, False, False, ...,  True, False, False],
       [ True, False,  True, ..., False,  True, False]], dtype=bool)

In [30]: np.sum(dice==6,0)
Out[30]: 
array([2, 1, 3, 3, 0, 1, 1, 2, 1, 2, 2, 2, 1, 0, 0, 3, 0, 1, 1, 4, 3, 1, 4,
       2, 2, 1, 2, 1, 3, 3, 1, 3, 2, 3, 0, 1, 0, 2, 2, 2, 1, 0, 1, 1, 1, 1,
       1, 0, 4, 1, 1, 3, 1, 4, 1, 2, 0, 2, 1, 0, 1, 2, 0, 1, 1, 1, 2, 3, 3,
       1, 1, 3, 1, 1, 1, 1, 0, 3, 1, 1, 2, 2, 2, 1, 3, 1, 2, 1, 1, 3, 2, 2,
       2, 2, 1, 0, 0, 2, 2, 2, 1, 2, 1, 1, 2, 2, 1, 2, 3, 0, 2, 3, 0, 0, 0,
       3, 0, 2, 0, 0, 1, 1, 2, 1, 2, 3, 1, 1, 3, 4, 1, 1, 1, 1, 1, 2, 3, 1,
       5, 2, 1, 3, 2, 2, 0, 2, 5, 1, 1, 0, 3, 3, 0, 2, 2, 2, 2, 0, 1, 2, 4,
       2, 4, 0, 1, 0, 2, 2, 1, 4, 1, 2, 2, 0, 0, 2, 0, 2, 2, 1, 2, 2, 2, 1,
       1, 2, 2, 2, 1, 1, 0, 1, 0, 0, 2, 2, 2, 1, 2, 2, 3, 1, 1, 0, 2, 1, 2,
       1, 1, 3, 0, 2, 2, 2, 0, 2, 2, 2, 1, 2, 3, 0, 1, 3, 0, 0, 1, 0, 2, 2,
       3, 2, 1, 0, 1, 1, 0, 1, 1, 1, 3, 3, 1, 2, 3, 1, 2, 0, 3, 0, 2, 2, 3,
       2, 3, 1, 1, 2, 1, 2, 2, 2, 3, 1, 3, 5, 0, 1, 3, 0, 1, 4, 4, 2, 2, 0,
       3, 0, 2, 1, 1, 2, 2, 4, 2, 2, 3, 0, 3, 0, 0, 1, 2, 1, 1, 0, 6, 2, 3,
       0, 4, 2, 2, 4, 1, 1, 4, 2, 1, 2, 3, 2, 1, 0, 1, 1, 0, 0, 3, 0, 2, 2,
       2, 1, 0, 1, 2, 0, 0, 3, 2, 2, 1, 1, 1, 1, 1, 2, 0, 1, 2, 1, 3, 1, 4,
       3, 4, 2, 3, 0, 3, 2, 0, 2, 0, 4, 1, 2, 2, 2, 3, 3, 1, 0, 1, 0, 2, 2,
       0, 1, 2, 2, 1, 1, 0, 3, 4, 2, 2, 5, 1, 0, 3, 4, 2, 2, 0, 2, 2, 3, 2,
       1, 2, 1, 1, 4, 2, 1, 2, 1, 3, 2, 4, 2, 0, 1, 1, 3, 1, 1, 3, 2, 5, 3,
       1, 3, 1, 1, 0, 3, 1, 1, 1, 0, 0, 1, 1, 2, 4, 3, 1, 2, 1, 2, 2, 1, 1,
       0, 3, 1, 4, 2, 2, 2, 3, 0, 0, 4, 1, 3, 1, 2, 1, 0, 3, 2, 0, 1, 2, 1,
       3, 1, 1, 1, 3, 5, 2, 0, 2, 4, 0, 2, 1, 4, 1, 4, 2, 3, 4, 3, 0, 2, 1,
       2, 3, 2, 1, 1, 0, 1, 0, 1, 3, 2, 4, 2, 1, 1, 3, 4, 3, 0, 1, 2, 2, 0,
       0, 1, 1, 2, 1, 1, 1, 1, 2, 1, 2, 3, 4, 4, 2, 0, 2, 2, 1, 3, 0, 4, 1,
       0, 1, 2, 1, 1, 1, 1, 0, 1, 2, 2, 3, 1, 2, 2, 0, 2, 1, 2, 3, 1, 2, 0,
       0, 0, 4, 2, 0, 1, 0, 3, 0, 1, 5, 1, 1, 0, 2, 4, 2, 2, 0, 1, 2, 1, 1,
       2, 3, 2, 3, 2, 2, 0, 0, 1, 3, 2, 2, 1, 1, 1, 0, 0, 2, 3, 2, 3, 2, 1,
       2, 2, 3, 0, 2, 3, 0, 3, 2, 3, 1, 4, 0, 1, 1, 1, 3, 1, 2, 1, 2, 2, 2,
       0, 1, 1, 1, 2, 2, 0, 2, 1, 2, 1, 4, 1, 1, 0, 0, 0, 0, 2, 0, 1, 1, 0,
       6, 3, 3, 1, 0, 1, 2, 3, 3, 0, 2, 1, 0, 1, 1, 1, 1, 0, 2, 2, 3, 3, 2,
       1, 1, 2, 1, 0, 2, 1, 4, 0, 3, 1, 1, 2, 1, 2, 1, 1, 2, 2, 2, 0, 4, 1,
       3, 1, 0, 3, 0, 0, 1, 1, 2, 1, 3, 2, 1, 1, 1, 1, 1, 0, 1, 2, 1, 2, 3,
       1, 2, 2, 2, 3, 3, 2, 3, 0, 0, 1, 1, 2, 4, 2, 2, 2, 1, 3, 1, 4, 1, 1,
       1, 0, 1, 1, 2, 5, 2, 1, 2, 2, 2, 2, 2, 4, 2, 2, 3, 0, 2, 1, 3, 2, 1,
       2, 2, 1, 0, 2, 0, 1, 3, 2, 3, 2, 1, 1, 2, 1, 1, 0, 0, 3, 1, 2, 3, 3,
       2, 2, 4, 2, 2, 2, 2, 1, 2, 3, 3, 4, 0, 0, 1, 3, 1, 4, 2, 0, 4, 2, 4,
       2, 1, 1, 3, 1, 0, 0, 3, 2, 1, 1, 1, 4, 3, 1, 2, 1, 1, 0, 1, 2, 3, 3,
       3, 1, 2, 5, 1, 0, 1, 3, 2, 6, 0, 1, 1, 2, 2, 5, 2, 1, 3, 0, 0, 2, 3,
       2, 1, 1, 0, 2, 2, 2, 2, 1, 2, 0, 0, 3, 2, 0, 2, 4, 2, 3, 2, 1, 1, 1,
       2, 3, 1, 4, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 2, 2, 2, 0, 2, 3, 5, 2, 4,
       1, 1, 2, 2, 3, 2, 3, 4, 1, 0, 0, 1, 1, 1, 0, 4, 1, 1, 4, 1, 0, 2, 0,
       2, 2, 3, 1, 1, 2, 2, 0, 3, 3, 1, 2, 1, 1, 2, 1, 1, 3, 2, 2, 0, 3, 1,
       0, 3, 2, 2, 4, 2, 6, 3, 3, 0, 3, 2, 2, 2, 2, 1, 2, 2, 0, 1, 2, 1, 1,
       2, 2, 3, 2, 2, 1, 1, 2, 1, 2, 1, 1, 0, 2, 1, 2, 1, 0, 5, 0, 2, 3, 1,
       2, 1, 0, 1, 1, 0, 1, 2, 4, 3, 1])


In [40]: np.sum(dice==6,0)>=nsix
Out[40]: 
array([False, False,  True,  True, False, False, False, False, False,
       False, False, False, False, False, False,  True, False, False,
       False,  True,  True, False,  True, False, False, False, False,
       False,  True,  True, False,  True, False,  True, False, False,
       False, False, False, False, False, False, False, False, False,
       False, False, False,  True, False, False,  True, False,  True,
       False, False, False, False, False, False, False, False, False,
       False, False, False, False,  True,  True, False, False,  True,
       False, False, False, False, False,  True, False, False, False,
       False, False, False,  True, False, False, False, False,  True,
       False, False, False, False, False, False, False, False, False,
       False, False, False, False, False, False, False, False, False,
        True, False, False,  True, False, False, False,  True, False,
       False, False, False, False, False, False, False, False,  True,
       False, False,  True,  True, False, False, False, False, False,
       False,  True, False,  True, False, False,  True, False, False,
       False, False,  True, False, False, False,  True,  True, False,
       False, False, False, False, False, False, False,  True, False,
        True, False, False, False, False, False, False,  True, False,
       False, False, False, False, False, False, False, False, False,
       False, False, False, False, False, False, False, False, False,
       False, False, False, False, False, False, False, False, False,
       False, False,  True, False, False, False, False, False, False,
       False, False,  True, False, False, False, False, False, False,
       False, False, False, False,  True, False, False,  True, False,
       False, False, False, False, False,  True, False, False, False,
       False, False, False, False, False, False,  True,  True, False,
       False,  True, False, False, False,  True, False, False, False,
        True, False,  True, False, False, False, False, False, False,
       False,  True, False,  True,  True, False, False,  True, False,
       False,  True,  True, False, False, False,  True, False, False,
       False, False, False, False,  True, False, False,  True, False,
        True, False, False, False, False, False, False, False,  True,
       False,  True, False,  True, False, False,  True, False, False,
        True, False, False, False,  True, False, False, False, False,
       False, False, False,  True, False, False, False, False, False,
       False, False, False, False, False,  True, False, False, False,
       False, False, False, False, False, False, False, False, False,
        True, False,  True,  True,  True, False,  True, False,  True,
       False, False, False, False,  True, False, False, False, False,
        True,  True, False, False, False, False, False, False, False,
       False, False, False, False, False, False,  True,  True, False,
       False,  True, False, False,  True,  True, False, False, False,
       False, False,  True, False, False, False, False, False,  True,
       False, False, False, False,  True, False,  True, False, False,
       False, False,  True, False, False,  True, False,  True,  True,
       False,  True, False, False, False,  True, False, False, False,
       False, False, False, False, False,  True,  True, False, False,
       False, False, False, False, False, False,  True, False,  True,
       False, False, False,  True, False, False,  True, False,  True,
       False, False, False, False,  True, False, False, False, False,
       False,  True, False, False, False,  True,  True, False, False,
       False,  True, False, False, False,  True, False,  True, False,
        True,  True,  True, False, False, False, False,  True, False,
       False, False, False, False, False, False,  True, False,  True,
       False, False, False,  True,  True,  True, False, False, False,
       False, False, False, False, False, False, False, False, False,
       False, False, False, False,  True,  True,  True, False, False,
       False, False, False,  True, False,  True, False, False, False,
       False, False, False, False, False, False, False, False, False,
        True, False, False, False, False, False, False, False,  True,
       False, False, False, False, False,  True, False, False, False,
       False,  True, False, False,  True, False, False, False, False,
        True, False, False, False, False, False, False, False, False,
        True, False,  True, False, False, False, False, False,  True,
       False, False, False, False, False, False, False, False,  True,
       False,  True, False, False, False, False,  True, False, False,
        True, False,  True, False,  True, False,  True, False, False,
       False, False,  True, False, False, False, False, False, False,
       False, False, False, False, False, False, False, False, False,
       False, False,  True, False, False, False, False, False, False,
       False, False, False, False, False,  True,  True,  True, False,
       False, False, False,  True,  True, False, False, False, False,
       False, False, False, False, False, False, False,  True,  True,
       False, False, False, False, False, False, False, False,  True,
       False,  True, False, False, False, False, False, False, False,
       False, False, False, False,  True, False,  True, False, False,
        True, False, False, False, False, False, False,  True, False,
       False, False, False, False, False, False, False, False, False,
       False,  True, False, False, False, False,  True,  True, False,
        True, False, False, False, False, False,  True, False, False,
       False, False,  True, False,  True, False, False, False, False,
       False, False, False,  True, False, False, False, False, False,
       False, False,  True, False, False,  True, False, False, False,
        True, False, False, False, False, False, False, False, False,
       False,  True, False,  True, False, False, False, False, False,
       False, False, False,  True, False, False,  True,  True, False,
       False,  True, False, False, False, False, False, False,  True,
        True,  True, False, False, False,  True, False,  True, False,
       False,  True, False,  True, False, False, False,  True, False,
       False, False,  True, False, False, False, False,  True,  True,
       False, False, False, False, False, False, False,  True,  True,
        True, False, False,  True, False, False, False,  True, False,
        True, False, False, False, False, False,  True, False, False,
        True, False, False, False,  True, False, False, False, False,
       False, False, False, False, False, False, False, False,  True,
       False, False, False,  True, False,  True, False, False, False,
       False, False,  True, False,  True, False, False, False, False,
       False, False, False, False, False, False, False, False, False,
       False, False,  True,  True, False,  True, False, False, False,
       False,  True, False,  True,  True, False, False, False, False,
       False, False, False,  True, False, False,  True, False, False,
       False, False, False, False,  True, False, False, False, False,
       False,  True,  True, False, False, False, False, False, False,
       False,  True, False, False, False,  True, False, False,  True,
       False, False,  True, False,  True,  True,  True, False,  True,
       False, False, False, False, False, False, False, False, False,
       False, False, False, False, False,  True, False, False, False,
       False, False, False, False, False, False, False, False, False,
       False, False, False,  True, False, False,  True, False, False,
       False, False, False, False, False, False, False,  True,  True, False], dtype=bool)

In [32]: np.sum(np.sum(dice==6,0)>=nsix)
Out[32]: 212

希望这能澄清事情。所以回答你的问题"它是否......总结一个布尔值?" - 是的。

总和的简单例子:

In [45]: a = np.array([2,5,6,1])

In [46]: a>3
Out[46]: array([False,  True,  True, False], dtype=bool)

In [47]: np.sum(a>3)
Out[47]: 2

答案 2 :(得分:0)

如果np.sum接收到一个布尔数组作为参数,它将对每个元素求和(将True计数为1,将False计数为0)并返回结果。

例如np.sum([True,True,False])将输出2:)

希望这会有所帮助。 (其他答案是正确的,但也许太正确了?!(特别是因为您在在线阅读一段代码时想到了这个问题,所以我认为您是在寻找一种直觉))