2014-12-02 54 views
0

我有一個代碼塊,它使用numpy.sum:布爾在numpy的總和

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

你有IPython嗎?當你將'dice == 6'分解成它自己的聲明時,這很正常。 – 2014-12-02 23:39:27

+0

@PaulH這段代碼只是來自一個網站,這不是我要運行的東西。我只需要了解發生了什麼。 – user2875994 2014-12-02 23:41:01

回答

2

dice是從1到6 dice==6整數值的ndice x n或10×1000矩陣變成該矩陣爲對應於真所有6S布爾值的矩陣。

np.sum(dice==6,0)np.sum(dice==6, axis=0)相同,這意味着總和取決於軸,因此現在您有1 x 1000陣列。你有n = 1000次運行,每次運行有ndice = 10次死亡。這個1×1000的陣列現在代表每次運行10次中有多少人死亡6秒。

np.sum(dice==6,0)>=nsix將其轉換爲布爾1 x 1000陣列,對於每次運行(這裏我們有1000次運行),如果至少nsix死亡人數翻起6s,則該值爲真。取這個1×1000陣列的總和,然後給你在這是真實的運行次數。

+0

如果我理解正確,是否這樣做:'np.sum(dice == 6,axis = 0)'是否意味着它將條目爲6的每個ndice加起來?所以說,如果骰子[1,0]和[2,0]是6,其餘的不同,新的和數組中的[0]將是12? – user2875994 2014-12-03 00:09:15

+0

哦,等等,它總結了bools,所以在這個例子中[0]將是2? – user2875994 2014-12-03 00:12:10

+0

是的,它恰恰是它總結布爾值。 – transcranial 2014-12-03 00:58:12

1

如果您不能運行自己的程序,我運行它給你,這些都是intersts的部分:

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 

希望這澄清了事情。所以要回答你的問題:「它是一個布爾值嗎?」 - 是的,它確實。對於總和

簡單的例子:

+0

所以'np.sum(dice == 6,0)'將所有6都設爲0.但是=> nsix部分是做什麼的?只計算3或更高的數字? 謝謝,我現在無法在這臺計算機上運行python。 – user2875994 2014-12-02 23:53:07

+0

@ user2875994無後顧之憂。我添加了'np.sum(dice == 6,0)> = nsix'的結果。如你所見,你是對的。 – Marcin 2014-12-02 23:56:15

+0

你怎麼知道212是3或更高的所有數字的總和?如果你不這樣做,你可以測試一個更小的陣列來驗證它嗎? – user2875994 2014-12-03 00:11:51