我有一段使用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它是否...加一个布尔值?
非常感谢任何解释,谢谢。
答案 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:)
希望这会有所帮助。 (其他答案是正确的,但也许太正确了?!(特别是因为您在在线阅读一段代码时想到了这个问题,所以我认为您是在寻找一种直觉))。